Actions and results

What each Marketing button and automatic behaviour does, with worked numbers and what the system refuses.

On this page (25)

Marketing Dashboard

ActionWhenWhat you doWhat happens
Tiles follow the periodTwo campaigns with delivery and attributed leads in the last 90 daysOpen Dashboard; switch Last 30 -> Last 90 daysSpend, Leads, Orders, Revenue, Gross Profit change to the new period; CPL = Spend / Leads; ROAS = Revenue / Spend (2 decimals)
Counts tiles1 active campaign, 1 active journey, 2 active rules, 3 audiencesOpen DashboardActive campaigns 1 (3 audiences); Active journeys 1 (2 rules); Opted in / opted out match Consent tabs
Funnel and sourcesLeads from 2 sources (e.g. Instagram Lead Ads, Website Form)Look at the 'Social-to-cash funnel' and 'Leads by source' cardsFunnel steps Impressions > Clicks > Leads > Qualified > Opportunities > Quotations > Orders > Invoices; sources sorted by leads
Top campaigns open the recordCampaigns with revenueClick the first row of 'Top campaigns by revenue'Campaign record opens (/marketing/campaigns/<id>); at most 5 rows, highest revenue first

Campaigns

ActionWhenWhat you doWhat happens
Create a campaignmarketing.campaign.editCampaigns > New; Name 'Ramadan Offers 2026', Objective Lead generation, Channels Instagram+WhatsApp, Start/End, Budget 15000, Status Draft; SaveSaved; Code CMP-000n; currency AED; utm_campaign 'ramadan_offers_2026'; Audit log 'marketing.campaigns.saved'
End before start refusedNew campaign; Start 2026-10-10, End 2026-10-01; SaveRefused: 'The end cannot be before the start.' on End
Required fieldsNew campaign; leave Name and Status empty; Save'Campaign is required.' / 'Status is required.'; nothing saved
Search and export5 campaignsType part of a name in Search; ExportRows filter as you type (all listed columns searched); CSV has the listed columns with the shown text
Codes do not repeatCampaigns CMP-0001..CMP-0003Create another campaignGets CMP-0004 (never an existing code)
Delete a campaign that has leads (API)Campaign with an attributed leadDELETE .../marketing/registers/campaigns/<id>Refused: 'A campaign that has run or has leads is cancelled or completed, not deleted.'; also refused for status Active/Paused/Completed

Campaign record

ActionWhenWhat you doWhat happens
Header and tilesCampaign with delivery and attributed leadsOpen the campaignHeader shows objective, channels, dates and utm_campaign; Spend 'of budget'; CTR = clicks/impressions %; CPC = spend/clicks; Collected from payments allocated to the invoices
Structure tabAd campaign > ad set > creative under the campaign, plus one creative with no ad setOpen StructureTree: campaign > ad campaign (platform chip, 'Lead form' chip if lead campaign, status, Daily budget) > ad set > creatives; the loose creative shown at level 1
Leads tab2 attributed CRM leads, one became an order and invoiceOpen Leads tab; click a rowColumns Date, Lead, Title, Source, Ad, Status, Quotes, Orders, Invoices, Revenue, Gross profit, Collected; row opens /crm/leads/<no> or /crm/pipeline/<no>
Delivery tabDelivery rows on 3 daysOpen DeliveryDaily spend bars (last 30 days) and an Entries table newest first
Revenue is read from posted invoicesLead > quotation > order confirmed, invoice NOT postedOpen the campaign; then post the invoice and reopenBefore posting: Orders 1, Revenue 0. After posting: Revenue = invoice lines net (x fx rate), Gross profit = revenue - line cost
Journeys cardA journey with campaign set (API only - the builder has no campaign field)Open Social-to-cash tab'Journeys on this campaign' lists it; otherwise 'None.'

Ad Campaigns

ActionWhenWhat you doWhat happens
Create an ad campaignA campaign and an ad accountAd Campaigns > New; name, Marketing campaign, Ad account, Platform Instagram, Objective Lead generation, Lead campaign ticked, Daily budget 500, Status Active; SaveSaved; shown in Ad Campaigns and in Lead Campaigns; appears in the campaign's Structure tab
Delete with childrenAn ad campaign that has an ad setOpen the ad campaign; DeleteExpected: a friendly refusal. Record what happens

Lead Campaigns

ActionWhenWhat you doWhat happens
Only lead campaigns listedOne ad campaign with and one without Lead campaignOpen Lead CampaignsOnly the ticked one is listed; the count matches
New from Lead CampaignsLead Campaigns > New; leave Lead campaign unticked; SaveSaved but it does NOT show on Lead Campaigns (the filter needs the tick) - tester note

Ad Sets

ActionWhenWhat you doWhat happens
Create an ad setAn ad campaign and an audienceAd Sets > New; name, Ad campaign, Audience, Budget 3000, Status Active; SaveSaved; shown under its ad campaign in the campaign's Structure tab

Creatives

ActionWhenWhat you doWhat happens
Create a creativeAn ad setCreatives > New; name, Campaign, Ad set, Format Reel, Headline, CTA, Status; SaveSaved; shown under the ad set in the Structure tab

Delivery & Spend

ActionWhenWhat you doWhat happens
Enter a day of deliveryA campaignDelivery > New; Date today, Campaign, Level Campaign, Spend 450.75, Impressions 12000, Clicks 340; SaveSaved; campaign record Spend +450.75, CTR 2.8%, CPC 1.33
One entry per day per itemFN-021 doneNew row for the same day, campaign and levelRefused: 'That day is already entered for this item - edit it instead.'
No double counting across levelsCampaign-level spend 450 and ad-set-level spend 200 on the same dayOpen the campaign record and Campaign ROISpend = 450 (only the campaign level is used when it exists)
Import CSVCSV with 3 good rows (campaign codes) and 1 unknown campaignImport CSV; choose the fileMessage '3 added, 0 updated - Row 4: no campaign ...'; rows appear with Source Import; re-import = '0 added, 3 updated'
Import by utm_campaignCampaign utm_campaign 'ramadan26'Import a row with campaign = ramadan26Row lands on that campaign

Ad Accounts

ActionWhenWhat you doWhat happens
Create an ad accountmarketing.campaign.edit AND marketing.configureAd Accounts > New; Platform Facebook, Name, Account id, Pixel id, token (sandbox), Status Manual entry; SaveSaved; reopened record shows the token box empty (sealed); list has no token column
Delete only deactivatesAn ad accountOpen it; DeleteRecord stays in the list with Active unticked (not removed); audience sync and conversions no longer use it

Audiences

ActionWhenWhat you doWhat happens
Create a dynamic audienceTest customers with posted invoicesAudiences > New; name, Type Dynamic, Purpose Marketing, Rule {"base":"customers","channel":"whatsapp"}; SaveSaved and built at once: Members = active customers, Reachable = those opted in on WhatsApp for Marketing; Status ready
Each rule baseData for each caseCreate one audience per base: leads, inactive_customers (days 30), high_value (min_value 20000), by_product, by_industry, by_location (city Dubai), abandoned_quotations (days 14), repeat_customers (min_orders 2)Members match the rule (spot-check 2 per audience against Sales/CRM); leads excludes 'do not contact' and archived leads
Reachable counts only consentedAudience of 3: A opted in, B opted out, C no recordOpen the audience'1 of 3 reachable (consented)'; chips: A 'Opted in', B 'Opted out', C 'No consent recorded'
Unknown allowed by settingFN-033; Settings 'Treat unknown consent as allowed' tickedRebuild the audienceC now 'Unknown - allowed by company setting'; 2 of 3 reachable. Untick again afterwards

Audience record

ActionWhenWhat you doWhat happens
RebuildDynamic audience; add a new customer in SalesRebuildMembers +1; Audit 'marketing.audience.built'
Add member to a static audienceStatic audienceAdd member: name, phone +971501112233; AddMember listed (key = 971501112233); Members +1; adding the same phone again does not duplicate
Remove memberStatic audience with 2 membersClick the bin on oneRemoved; Members and Reachable recounted
Sync without an ad accountNo active ad account for TikTokPlatform tiktok; Sync audienceRefused: 'Connect an ad account on that platform first (Campaigns > Ad Accounts).'
Sync prepared (manual account)Facebook ad account, status Manual entryPlatform facebook; Sync audienceLine shows 'facebook: prepared <count> <time>'; count = members with consent for Profiling or Marketing on 'Any channel'; hashes only (SHA-256), nothing sent
Real sync to MetaMeta sandbox ad account with Status Connected and a test tokenSync audience to facebookStatus uploaded with external id, or failed with error. Blocked if no Meta sandbox account
ActionWhenWhat you doWhat happens
Record an opt-inmarketing.consent.editRecord consent: phone +971501234567, WhatsApp, Marketing, Opted in, Explicit, source, evidence; SaveRow listed: Status Opted in, Consent date now, Expires = now + 720 days (24 months x 30 days); History shows one 'opted_in' entry by you
Opt-out winsFN-042 doneRecord consent for the same phone, WhatsApp, Marketing, Opted outSame row moves to Opted out (not a second row); Opt-out date set; History has 2 entries; consent check answers 'Opted out'
'Any channel' opt-out blocks every channelPerson opted in on WhatsAppRecord Opted out on 'Any channel' for Marketing; check WhatsApp and EmailBoth refused 'Opted out' (opt-out on any channel wins over a WhatsApp opt-in)
Purpose is separatePerson opted out of Marketing on WhatsAppCheck Promotions on WhatsApp (API /consent/check?channel=whatsapp&purpose=promotions)'No consent recorded' (purposes are separate records). Transactional / Support always 'Service message'
ExpirySettings 'Consent expires after' = 1 monthRecord an opt-in; move the test clock or set expires_at to yesterday in a test database; reopen ConsentAfter expiry: Status column 'expired', Expired tab counts it, consent check 'Consent expired'
Never expiresSettings expiry 0Record an opt-inExpires empty
Tabs, channel filter, searchMix of recordsClick each tab; choose Channel Email; search by part of a phone '5012'Rows filter correctly; phone search matches digits. Note: tab counts are counted on the filtered list
STOP keyword (Omnichannel)Omnichannel WhatsApp sandbox; contact opted inCustomer sends 'STOP' (or 'إلغاء', 'unsubscribe')Opted out on WhatsApp for Marketing, Promotions and Newsletter, source 'whatsapp keyword', evidence = message; rules/journeys on 'Consent opted out' run. Blocked without a WhatsApp sandbox
START keywordFN-049 doneCustomer sends 'START'Opted in on WhatsApp for Marketing (explicit) - other purposes stay opted out
History modalA record with 3 changesClick the History iconWhen, Status, Source, Evidence, By - newest first; 'Current evidence' card

Rules

ActionWhenWhat you doWhat happens
Create a rule (draft)New rule: name, When Lead created, condition Source contains Instagram, action Add tag 'ig'; SaveSaved with status draft; it does NOT run until activated
Activate and fireFN-052; scheduler onActivate; create a CRM lead with Source 'Instagram Lead Ads'; wait for the scan (up to 10 min) or Settings > Scan ERP events nowLead gets tag 'ig'; rule Runs +1, Last run set; Scheduled Actions > What ran shows 'Add tag ... done'
Conditions not metActive rule FN-053Create a lead with Source 'Website'No tag; Runs unchanged
any / all matchRule with 2 conditionsSwitch 'Conditions must' between all and any; trigger with one condition trueall: not run; any: run
Order and StopRule A order 5 with Stop ticked, rule B order 10, same triggerFire the triggerOnly A runs; untick Stop -> A then B
PauseActive rulePause; fire the triggerRule does not run; button shows Activate
Each Marketing actionA lead with an ownerOne rule per action: Create CRM task, Assign lead owner (round robin), Set priority, Notify salesperson, Send email, Add to audienceTask due today + days on the owner; owner changed with CRM event 'Assigned by automation'; priority set; HR notification to owner; email sent only if Email consent; member added - each logged in Scheduled Actions
Omnichannel actions without OmnichannelOmnichannel uninstalledRule with 'Send WhatsApp' firesLogged 'skipped: Omnichannel is not installed'; Triggers card says Omnichannel actions run only while it is installed
Delete a ruleRule with run historyOpen; DeleteRule gone; its log rows stay with Rule blank
Time triggers (daily)Posted unpaid invoice due in 2 days; one overdue; a customer with last sale > inactive daysActive rules on Invoice due / Invoice overdue / Customer inactive; wait for the daily runEach fires once per invoice (due: once per due date) and once per customer per last-sale date; Conversion Tracking does not list these (timed events)

Journey builder

ActionWhenWhat you doWhat happens
Build and saveNew journey; name; trigger Lead created; Add step Action (Add tag); Wait 2 minutes; Condition 'Customer replied since the wait is set'; Yes: Stop; No: Action Notify salesperson; Save'Saved'; Test / Activate / Archive buttons appear; status draft
Activate needs stepsA journey saved by API without nodesActivateRefused 'Add the steps before activating the journey.'
Test runFN-061Test; deal_id of a test lead; Run onceRun status 'waiting' after the tag step; trail trigger > action; Recent runs shows it with 'wakes' time
Wait wakesFN-063; scheduler on (A2N_SCHEDULER not 0)Wait 2-3 minutes; reopen the journeyRun moved past the wait: condition 'no' -> notify; status completed. Scheduled Actions 'Waiting to run' is empty for it
Reply ends the wait earlyOmnichannel; wait 1 day with 'or until the customer replies'Customer replies on WhatsAppRun wakes within a minute; condition 'Customer replied' = yes path. Blocked without Omnichannel sandbox
A/B branchBranch 70/30 with a tag on each sideRun 20 testsRoughly 14 A / 6 B (random) - each run's note says A or B
Re-entryActive journey, re-entry offFire the trigger twice for the same leadOnly one run; tick Allow re-entry -> second run starts
Loop guardA step whose next step points back (API)RunStops after 60 steps: status failed, trail 'too many steps (a loop?)'
Pause and archiveJourney with a waiting runPause -> wait past wake time -> Activate; then ArchivePaused: run does not move; after Activate it continues. Archive: waiting runs become 'stopped'

Triggers

ActionWhenWhat you doWhat happens
Usage counts2 rules and 1 journey on Lead created (1 rule active)Open TriggersLead created: Rules 2, Active rules 1, Journeys 1; Code column shows lead_created

Scheduled Actions

ActionWhenWhat you doWhat happens
Waiting and logRuns waiting; actions runOpen Scheduled ActionsWaiting list ordered by Runs at; What ran shows rule/journey, event, action, status done/skipped/failed and detail

Campaign ROI

ActionWhenWhat you doWhat happens
Row mathsCampaign: spend 1,000; 10 leads (4 qualified, 2 opportunities); 1 order; invoice net 5,000 AED, line cost 3,000Open Campaign ROICPL 100.00; Cost per Opportunity 500.00; Cost per Order 1000.00; Revenue 5000.00; Gross Profit 2000.00; ROAS 5.00; Profit ROAS 2.00
Totals and export3 campaignsCheck the total tiles; ExportTotals = sums; ROAS total = total revenue / total spend; CSV has every column
Date filterDelivery and leads in Sep and OctFrom 2026-10-01 To 2026-10-31Only October spend and October leads counted
Attribution model changes creditOne lead touched by campaign A first, then campaign BSettings model First touch -> ROI; Last touch -> ROI; Linear -> ROIFirst: A gets 1 lead; Last: B gets 1; Linear: A 0.5 and B 0.5 (counts show 0.5, never 0.50). Revenue split the same way
Foreign-currency invoiceAttributed order invoiced in USD with fx rate 3.6725Open ROIRevenue in AED = USD net x 3.6725
Revenue only after postingOrder confirmed and invoiced but invoice draftOpen ROI; post the invoice; reopenRevenue 0 before, invoice net after; Collected follows allocated payments

Attribution

ActionWhenWhat you doWhat happens
Lead from Omnichannel LeadsOmnichannel installed; campaign with utm_campaign 'ramadan26'Omnichannel > Leads > Lead Inbox > Add lead (name, phone +971501234567, utm_campaign ramadan26); convert to a CRM lead; open AttributionRow: Source, Platform, Campaign = the Ramadan campaign, UTM shown, Touches 1; CRM lead's Campaign field filled
Touches and last touchSame lead touched again by another campaign (second conversation / form)Open AttributionTouches 2; first touch unchanged; campaign moves to the last touch
Lead without OmnichannelOmnichannel not installed; create a CRM lead with Campaign text = a campaign nameOpen Attribution / ROINo attribution row is made (attribution comes only from Omnichannel captures) - note; ROI leads stay 0
Partner sales inside the windowAttributed lead converted outside CRM (no quotation link); customer buys 30 days later; window 180Open ROIThat sale and its invoice count for the campaign; a sale 200 days later does not

Conversion Tracking

ActionWhenWhat you doWhat happens
Events recorded onceNew CRM lead, quotation, confirmed order, posted invoice, receiptSettings > Scan ERP events now (twice)First scan message 'N events, M journeys moved'; one event per record per type; second scan adds 0
Tabs and countsFN-083Click each tabCounts match; timed events (invoice due/overdue, customer inactive) are not listed
No conversion APIPlatform switch off in settingsRecord eventsStatus recorded, Sent to empty
No ad accountfacebook ticked; no active Facebook ad account (or no pixel id)Lead attributed to facebook; scanStatus skipped; Sent to 'facebook: no_account'
Queued for a manual accountFacebook ad account with pixel id, Status Manual entryScanStatus queued (not sent)
Real dispatchMeta / TikTok / Snapchat / LinkedIn sandbox account, status Connected, test token and pixelPost an attributed invoice; scanStatus sent (or failed with code); platform test-events tool shows the event with hashed email/phone. Blocked if no sandbox. Note: with A2N_MKT_TRANSPORT=capture 'sent' means captured only

Marketing Settings

ActionWhenWhat you doWhat happens
Save settingsmarketing.configureChange model, window 90, expiry 12, inactive 60, high value 20000, tick facebook; Save'Saved'; reload shows the values; Audit 'marketing.settings.saved'
ValidationWindow 4000; Save'Between 0 and 3650.' on the window field; nothing saved
SchedulerA2N_SCHEDULER not 0 on stagingCreate a CRM lead; do nothing for 10-12 minutes; open Conversion TrackingLead Created event appears without pressing Scan (scan every 10 minutes, journey waits every minute, time triggers once a day; first run ~75 s after start)

Features

ActionWhenWhat you doWhat happens
Automation switched offCompany adminApplications > Marketing > Features: Automation and journeys Off; open Marketing menu; try to save a rule by APIAutomation group gone from the menu; save refused 409 'Automation and journeys is disabled for this company.'; existing rules still readable by API. Switch back On
Attribution switched offTurn Attribution, conversions and ROI Off; open Analytics; press Scan ERP events nowScan refused 409; ROI/Attribution screens still open. Switch back On

Fields

ActionWhenWhat you doWhat happens
Campaign field rulesFields: End date Required, Description Hidden; open Campaigns > NewDescription not shown; End marked required and Save without it refused; set back to Shown

Omnichannel menu

ActionWhenWhat you doWhat happens
Same screens from OmnichannelBoth apps installedOpen Omnichannel > Campaigns > Audiences, Conversion Tracking; Automation > Rules; Analytics > Campaign ROI; Configuration > ConsentEach opens the Marketing screen with breadcrumb 'Omnichannel / ...'; data identical to Marketing
Marketing not installedUninstall Marketing (test company)Open those Omnichannel entries'Not installed' card: '<screen> belongs to the Marketing app, which this company has not installed.'; Marketing API answers refused. Reinstall afterwards

AI assistant

ActionWhenWhat you doWhat happens
Campaign ROI questionmarketing.analytics.view; campaigns with dataAsk 'What is the ROI of CMP-0001?' then 'ROI of all campaigns'Answer with spend, revenue, gross profit, ROAS, profit ROAS and the model, plus a table; unknown name -> 'No campaign matches "...".'
Consent questionmarketing.consent.view; person opted out on WhatsAppAsk 'May I send WhatsApp marketing to +971501234567?''No - Opted out (whatsapp).'; without phone/email -> 'Give a phone number or an email.'; the assistant never changes data

Uninstall

ActionWhenWhat you doWhat happens
Marketing uninstalledTest companyAdministration > Apps: uninstall Marketing; call any /marketing/ URL; reinstallRefused while uninstalled; data back after reinstall