Skip to content

Paid add-on. Marketing is licensed separately from the open-source packages. See pricing

Filament screens

The resources and pages Odden Marketing adds to the Odden Filament admin.

Odden Marketing adds its screens to the Odden admin panel by itself when getodden/crm-filament is installed: it registers them through the open package's Odden\Filament\Support\Modules registry, so there is nothing to configure. They live in Odden\Marketing\Filament, with views under the odden-marketing-filament namespace. To leave them out, use OddenPlugin::make()->disableModules('marketing'). Marketing also adds three tabs to the contact screen (Marketing Campaigns & Email Touchpoints, Lead Capture & Form Submissions, Lead Score & Decay History), a Recalculate Intent action to the company table, and a Marketing card to the Executive Overview.

Resources

The resources are in the Marketing navigation group. Sales and Marketing each have an item labelled Email Templates: the Sales one manages SalesEmailTemplate records used by cadences, and the Marketing one manages MarketingTemplate records used by campaigns.

Resource Model Navigation Pages
CampaignResource Odden\Marketing\Models\Campaign Marketing › Campaigns list, create, edit
MarketingTemplateResource Odden\Marketing\Models\MarketingTemplate Marketing › Email Templates list, create, edit
MarketingFormResource Odden\Marketing\Models\MarketingForm Marketing › Lead Capture Forms list, create, edit
MarketingWorkflowResource Odden\Marketing\Models\MarketingWorkflow Marketing › Marketing Workflows list, create, edit
LandingPageResource Odden\Marketing\Models\LandingPage Marketing › Landing Pages list, create, edit
LeadScoringRuleResource Odden\Marketing\Models\LeadScoringRule Marketing › Lead Scoring Rules list, create, edit
NpsSurveyResource Odden\Marketing\Models\NpsSurvey Marketing › Nps Surveys list, create, edit
MarketingSubscriptionResource Odden\Marketing\Models\MarketingSubscription Marketing › Suppression List list, create (no edit page)
MarketingAssetResource Odden\Marketing\Models\MarketingAsset Marketing › Marketing Assets list, create, edit
MarketingEventResource Odden\Marketing\Models\MarketingEvent Marketing › Marketing Events list, create, edit
AdAudienceSyncResource Odden\Marketing\Models\AdAudienceSync Marketing › Ad Audience Sync Bridges list, create, edit

The template editor

A template's blocks are edited with a drag-and-drop editor, the MailEditor field of getodden/mail (version 2.2.1 or newer). The email is shown as it will be sent. Drag a block from the list onto the email, or drag a block to move it. Select a block to change its settings, and use Style options for the less common ones. Every action also has a button and a keyboard shortcut (move up and down, duplicate, delete, and Ctrl or Cmd + Z for undo), so nothing needs the mouse.

  • Assets. The editor ships as Filament assets. Run php artisan filament:assets after installing or updating (filament:upgrade does it too, and runs on composer install in a standard Filament app).
  • Same data. Blocks are saved as the same list of {type, data} slots as before, so existing templates open as they are. Apply Layout Preset and Insert Reusable Snippet change the blocks in the editor like any other edit.
  • Not editable here yet. Eight block types are editable in the editor: header, hero, text, button, image banner, feature highlights, spacer and footer. A block of any other type is kept exactly as it is, and can be moved, duplicated or deleted.
  • Preview theme. The editor's preview uses the template's Brand & Global Styling tokens as they stand in the form, saved or not, so the colors, font, corner radius and width you see are the ones the email is built with (needs getodden/mail 2.2.1 or newer).

Campaigns

Row actions:

Action What it does
Preview Renders the campaign with sample data in a modal.
Spam Audit Runs AuditCampaignDeliverabilityAction and shows the result.
Send Now Shown for draft and scheduled campaigns. Claims the campaign (it becomes Sending; a second click does nothing) and queues a DispatchCampaignJob, which compiles and queues the messages on the queue worker. Refused, with a notification, when the campaign has no list or no postal address is configured.
Pick Winner & Deploy Shown for A/B campaigns that are sending and have no winner yet. Runs EvaluateAbTestWinnerAction, which also sends the winning variant to the remaining audience.
AI Copy Assistant Suggests subject lines with the bound Odden\Marketing\Contracts\SuggestsSubjectLines (by default the template-based SuggestSubjectLinesAction, no AI model) and saves the one you pick to the campaign.
Send Test Sends a proof to the addresses you enter with SendCampaignProofAction, optionally using a contact's data for merge tags. The proof is queued like other marketing mail (see Sending mail), so a queue worker must be running for it to arrive.
Duplicate Creates a draft copy named "Copy of …" (Campaign::duplicateAsDraft()): content, audience, sender, targets, budget and settings are kept; counters, spend, schedule, send times, the A/B outcome and utm_campaign are not.

The edit page also has Send Test and Duplicate header actions.

Other marketing resources

Resource Extra actions
MarketingTemplateResource Layout presets and reusable snippets in the form, Generate AI Variants, Live Preview, Send Test (a one-off preview sent with Mail::html() during the request, not queued like campaign proofs), Evaluate A/B, Revisions, Export HTML, Export MJML, Download ZIP, and Replicate. The presets and the block editor come from getodden/mail, which getodden/crm-marketing requires.
MarketingFormResource Embed Code modal and a public URL column.
LandingPageResource Embed Snippet modal and a public URL column.
MarketingWorkflowResource Visual Journey modal and the Workflow Execution Steps & Branching relation manager.
MarketingSubscriptionResource Restore / Resubscribe for non-subscribed rows and Suppress for subscribed rows. Restoring an address suppressed for a bounce also resets the contact's bounced email status, so the address is checked again instead of staying blocked; restoring one that complained warns first. Hosts can listen for Odden\Marketing\Events\SuppressionLifted to keep a record.
MarketingAssetResource Copy URL for the asset's download link.
AdAudienceSyncResource Sync Now, which runs the bound Odden\Marketing\Contracts\PublishesAdAudience. By default that is SyncAdAudienceAction, which only computes the SHA-256 hashes and records the count; it does not contact an ad platform. Download hashed file gives a CSV for Google, Meta or LinkedIn to upload by hand; see Ad audiences.

Pages

Page URL What it does
MarketingCockpit (Marketing Cockpit) /admin/marketing-cockpit Campaign, delivery, open/click, lead and workflow totals, recent campaigns, active forms and submissions, closed-loop metrics (CalculateClosedLoopMetricsAction) and a conversion funnel (AnalyzeConversionFunnelAction). It can send a campaign immediately with DispatchCampaignAction.
AbmCockpit (ABM Cockpit) /admin/abm-cockpit Target accounts by tier, with intent scores and buying-committee counts. Recalculate runs CalculateCompanyIntentScoreAction for one company, or for every company that has an account_tier or an intent surge.
MarketingAttribution (Attribution & ROI) /admin/marketing-attribution Campaign ROI, attributed pipeline and won revenue, leads and blended cost per lead, under a selectable attribution model: first_touch (default), last_touch, linear, u_shaped, w_shaped or time_decay.
CampaignBenchmarking (Campaign Benchmarking) /admin/campaign-benchmarking Side-by-side comparison of selected campaigns against averages. It starts with the four most recently sent campaigns.
MarketingCalendar (Campaign Calendar) /admin/marketing-calendar A month view of campaign sends, with previous, next and current month navigation.
UtmLinkBuilder (UTM Link Builder) /admin/utm-link-builder Builds a tracked URL from a base URL (it defaults to url('/'), or to a landing page or campaign you select) and UTM source, medium, campaign, term and content. Nothing is saved.
SenderDomainHealth (Domain Health (SPF/DKIM)) /admin/sender-domain-health Checks SPF, DKIM, DMARC and MX for a domain with DomainHealthCheckService. The domain defaults to the domain of odden-marketing.defaults.sender_email, and the DKIM selector defaults to odden.

SenderDomainHealth makes live DNS lookups (dns_get_record()) each time it renders.

URLs

Resources use filament.admin.resources.{slug}.index, pages use filament.admin.pages.{slug}:

Class URL Route
CampaignResource /admin/campaigns filament.admin.resources.campaigns.index
MarketingTemplateResource /admin/marketing-templates filament.admin.resources.marketing-templates.index
MarketingFormResource /admin/marketing-forms filament.admin.resources.marketing-forms.index
LandingPageResource /admin/landing-pages filament.admin.resources.landing-pages.index
MarketingWorkflowResource /admin/marketing-workflows filament.admin.resources.marketing-workflows.index
LeadScoringRuleResource /admin/lead-scoring-rules filament.admin.resources.lead-scoring-rules.index
MarketingSubscriptionResource /admin/marketing-subscriptions filament.admin.resources.marketing-subscriptions.index
NpsSurveyResource /admin/nps-surveys filament.admin.resources.nps-surveys.index
MarketingAssetResource /admin/marketing-assets filament.admin.resources.marketing-assets.index
MarketingEventResource /admin/marketing-events filament.admin.resources.marketing-events.index
AdAudienceSyncResource /admin/ad-audience-syncs filament.admin.resources.ad-audience-syncs.index
Page URL
MarketingCockpit /admin/marketing-cockpit
AbmCockpit /admin/abm-cockpit
MarketingAttribution /admin/marketing-attribution
CampaignBenchmarking /admin/campaign-benchmarking
MarketingCalendar /admin/marketing-calendar
UtmLinkBuilder /admin/utm-link-builder
SenderDomainHealth /admin/sender-domain-health

Authorization

Pages and actions check your policies the same way the open resources do (see the Filament admin authorization).

Page Requires viewAny on
Marketing Cockpit CampaignResource, MarketingFormResource, MarketingWorkflowResource, ContactResource
ABM Cockpit CompanyResource
Attribution & ROI, Campaign Benchmarking, Campaign Calendar, Domain Health (SPF/DKIM) CampaignResource
UTM Link Builder CampaignResource, LandingPageResource

Page and board actions

Page Method Checks
ABM Cockpit recalculateCompany() update on the company
ABM Cockpit recalculateAll() update on every target account it would recalculate; if any is denied, nothing is recalculated
Marketing Cockpit sendCampaignNow() update on the campaign

Resource actions

Resource or page Actions Checks
Campaigns Send Now, Pick Winner & Deploy, AI Copy Assistant, Send Test (also on the edit page) update on the campaign
Campaigns Preview, Spam Audit view on the campaign
Campaigns Duplicate view on the campaign and create for campaigns (create only on the edit page)
Marketing Templates Send Test (also on the edit page), Apply Layout Preset, Evaluate A/B update on the template
Marketing Subscriptions Restore / Resubscribe, Suppress update on the subscription
Ad Audience Syncs Sync Now update on the sync
Companies Recalculate Intent update on the company

Swapping a built-in behaviour

Contract Used by Built-in implementation
Odden\Marketing\Contracts\SuggestsSubjectLines AI Copy Assistant on campaigns, and the subject-line helper on templates SuggestSubjectLinesAction: fixed phrase templates, no AI model.
Odden\Marketing\Contracts\PublishesAdAudience Sync Now on an ad audience sync SyncAdAudienceAction: computes SHA-256 hashes and records the count; does not contact an ad platform.

Overriding views

View Used by
odden-marketing-filament::pages.marketing-cockpit MarketingCockpit
odden-marketing-filament::pages.abm-cockpit AbmCockpit
odden-marketing-filament::pages.marketing-attribution MarketingAttribution
odden-marketing-filament::pages.campaign-benchmarking CampaignBenchmarking
odden-marketing-filament::pages.marketing-calendar MarketingCalendar
odden-marketing-filament::pages.utm-link-builder UtmLinkBuilder
odden-marketing-filament::pages.sender-domain-health SenderDomainHealth

Copy a view to resources/views/vendor/odden-marketing-filament under the same relative path to override it. Some actions also render views from Marketing itself, such as odden-marketing::template-preview.