Marketing settings

Overview
Marketing settings maintain the module's statuses — in three tabs: campaigns, email campaigns and social posts.
In Octibiz statuses are data, not program logic: they can be created, renamed and reordered without anyone touching code. The order determines how lists and filters offer them.
The sending path does not belong here. It is configured under Integrations — that is where credentials live; here there is only vocabulary.
Core tasks
Maintain campaign statuses. The stages a campaign passes through.
Maintain email campaign statuses. The stages of a send.
Maintain social statuses. The stages of a post from planning to publication.
Set the order. All three lists are sortable; the order is what people later see in the selection fields.
Track opens. An invisible image in the mail reports when it was opened. The switch is off by default. Even when it is on, a mail only carries the image if the recipient has agreed to open tracking — a separate consent with the topic Open tracking, which a form can ask for or which you record with proof. If either is missing, the mail goes out without the image; clicks on links are counted regardless. Permission: platform.settings.manage (setting marketing.tracking.opens).
Studio variants. Under Studio variants you set how many variants the studios create by default: Variants per ad in the ad studio (2–8, default 4; setting marketing.studio.ad_variants) and Versions per email suggestion in the mail studio (1–3, default 2; setting marketing.studio.mail_versions). The number can be changed per run in the studio. Permission: platform.settings.manage.
Switch ad networks. Under Ad networks each network (Meta, LinkedIn, TikTok) shows whether it is switched on and whether an ad account is connected. LinkedIn and TikTok are off by default and can be switched on here (settings marketing.ads.linkedin.enabled, marketing.ads.tiktok.enabled, permission platform.settings.manage). Without an ad account it says "Access missing" with the way to connect. For TikTok there is an extra note that advertising needs a second app at "TikTok for Business" — the app used for posts is not enough. More under Ad campaigns.
Set up conversion reporting to ad networks. Under Conversion reporting to ad networks each network (Meta, Google Ads, TikTok, LinkedIn, Microsoft Advertising, Pinterest, ChatGPT) shows whether it gets leads, won deals and purchases reported back — with its status (Off, Incomplete, Ready), the numbers of the last 30 days and the last error. Set up opens the network's IDs. Below sits the log of every report. Permission to set up: marketing.ads.connect, to view: marketing.ads.view. More in the next section.
Maintain sender profiles. On whose behalf newsletters and journeys are sent: sender name, sender address, reply-to address and imprint. Per brand exactly one profile is the default; a profile without a brand is the house default for cross-brand sends and every brand without its own profile. A campaign can choose another profile on creation (Sender), a single message may override it once more. Permission: marketing.config.manage.
Conversion reporting to ad networks
Ad networks optimise for what they are told is a success. Octibiz reports three events back server-side via the networks' interfaces (Conversions API):
| Kind | When | Value |
|---|---|---|
| Lead | a lead is created (form, mask, import) | no value |
| Deal won | a deal is won | value of the deal |
| Purchase | an invoice is fully paid (flow Report paid invoices to the ad networks) | invoice amount with currency |
By default Lead and Purchase are reported. “Deal won” and “Purchase” together count the same revenue twice when a paid invoice follows a won deal — pick only one then.
Only with consent. A person is reported only if they consented to ad measurement. The consent comes from the form: add a checkbox named ads_consent to the form, for example “I agree that my enquiry is passed on in hashed form to advertising partners (e.g. Meta, Google, Microsoft, Pinterest, ChatGPT) to measure advertising success.” The wording is stored as proof. Without consent nothing is stored and nothing is sent — the report shows as skipped in the log. Consent to ad measurement is deliberately separate from the marketing consent for newsletters.
Click IDs. When a person comes from an ad, the network appends an ID to the address (fbclid for Meta, ttclid for TikTok, li_fat_id for LinkedIn, gclid/gbraid/wbraid for Google, msclkid for Microsoft, epik for Pinterest, oppref for ChatGPT). The form picks it up from the submit address, from a hidden field of the same name or from the referring page and stores it with the consent — for 90 days, as long as the networks attribute a click.
Hashed only. Address, phone and name leave the system only as SHA-256 of the normalised values (as the networks require); nothing goes out in clear text. The log only shows what was matched on (e.g. em, fbclid), never the values.
Deduplicated and retried. Every report carries a fixed ID (octibiz.<kind>.<source>). The same event goes out exactly once per network, even if it fires twice; the network deduplicates on this ID as well. If a network does not answer (timeout, overload), Octibiz retries over about two hours. A final error stays in the log with the network's reason and can be queued again with Send again once fixed.
What to set up per network
Meta. In Events Manager under Data sources pick the dataset (pixel) and enter the dataset ID. Access: the token of the connected Meta ad connection is enough if the user has access to the dataset; otherwise store a system user token from Business Manager as own access token. To check, enter the test code from Test events — while it is set, reports only show up there.
TikTok. In TikTok Ads Manager under Tools → Events → Web events copy the pixel code. On the same page generate an Events API access token and enter it as own access token (otherwise the TikTok ad connection's token is used). Optionally a test code.
LinkedIn. In Campaign Manager under Analyze → Conversion tracking create one conversion per reported kind with the method Conversions API and link it to the campaigns; enter its number (or urn:lla:llaPartnerConversion:…) per kind. The LinkedIn ad connection needs the rw_conversions permission (partner access at the network); an own access token with this permission works too.
Google Ads. Under Goals → Conversions, create one conversion action “Import from clicks” per reported kind and enter its number (or customers/…/conversionActions/…) per kind. For leads without a click, enable enhanced conversions for leads — Google then matches via the hashed address. Access: the Google Ads sign-in with developer token; the customer ID comes from the chosen ad account (or enter it). Reported with gclid (or gbraid/wbraid), order ID = ID of the report.
Microsoft Advertising. Under Conversion tracking, create one “offline conversion” goal per kind and enter its name per kind. Access: the Microsoft sign-in with developer token; ad account and customer come from the connection (or enter them). Matched via msclkid or hashed address and phone.
Pinterest. The Pinterest connection with ads consent is enough; alternatively generate a conversion access token under Ads → Conversions and enter it as your own access key. The ad account comes from the connection (or enter it). Lead = lead, deal won and purchase = checkout; click ID epik.
ChatGPT. In the OpenAI Ads Manager under Conversions, create a Pixel ID and a Conversions API key. Enter the Pixel ID here and the key as your own access key (or as conversions_api_key on the “openai_ads” integration). Lead = lead_created, deal won and purchase = order_created; OpenAI appends the click ID oppref to the landing page. OpenAI only accepts reports up to seven days back.
Log
| Status | Meaning |
|---|---|
| Pending | queued, about to be sent |
| Sent | accepted by the network; the receipt is in the row |
| Failed | reason in plain text (network message or missing setup); Send again possible |
| Skipped | deliberately not sent: no consent, nothing to match, network or kind off, erasure request |
Goal metric measurement
Overview, goal progress, reports and strategy calculate with one metric across all channels: cost, leads, purchases and revenue per campaign, channel and ad network. Under Goal metric measurement you set how attribution works (read with marketing.report.view, change with marketing.config.manage).
Where the numbers come from. Advertising: spend, results and revenue as the ad network reports them (results count as leads for the goal “Leads”, as purchases for “Sales”). Mail, SMS and WhatsApp: deliveries and clicks of the sends, conversions of the sends. Plus Octibiz's own attribution: leads (first touch in the period) and won deals (won in the period, with the deal's value) go to the touches they came from.
Attribution model. Last touch (default — the way the ad networks count, too): the touch before the conversion gets the lead or deal. First touch: the touch through which the person first came. Linear: all touches share; the value is split to the cent, a deal still counts exactly once.
Nothing counts twice. Someone who comes from an ad and fills in your own form is a lead in Octibiz — and the ad network counts them via its form, the pixel or the conversion report as well. A paid touch (utm_medium=paid, source = network) therefore counts at the ad campaign instead of additionally at the campaign, and per row and day the larger of the two numbers applies, never the sum. The same for purchases: conversions of sends against won deals.
SMS and WhatsApp cost. SMS cost per part: an SMS has 160 characters, longer ones are chained in parts of 153 characters; with an emoji or another character outside the GSM character set it is 70 or 67 characters per part. WhatsApp costs per message. You maintain the price per SMS part and the price per WhatsApp message in ONE place, under Cost of SMS and WhatsApp on this page (guide values 8 and 13 cents) — they apply to the cost estimate before sending and to the metric. Without a price, the messages count as 0.
- SMS campaigns (bulk sending): sent SMS × parts × price per part, on the day of sending.
- SMS from journeys (step “Message” with channel SMS, also as a fallback): every SMS sent goes into the **send
log** — with its parts and the price at the time of sending. The cost appears at the journey's campaign; a later tariff change does not rewrite it. Whatever did not go out (no consent, blocked, provider error) costs nothing. The log holds neither number nor text, only the provider's ID for matching against its invoice.
- WhatsApp (from journeys and from bulk sending to an audience, e.g. a campaign created from a template): every message
sent goes into the send log the same way — with the price per message at the time of sending — and counts at its campaign. A rerun of the same step on the same day sends nothing and costs nothing.
Outlier warnings
Every day at 9 am Octibiz compares marketing against its own history and reports what falls out of line. The list is under Marketing → Overview → View warnings (the notice appears as soon as something is open); the people in charge also get a notification.
| Kind | Checked | Default |
|---|---|---|
| Sudden spend | an ad campaign's spend yesterday against the daily average of the 14 days before (at least 3 days with spend) | from 200% and at least €50 more |
| Cost per goal rising | cost per goal (conversion as reported by the network) of the last 7 days against the 28 days before (at least 5 goals); without a single goal it counts whether more than the raised cost of one goal was spent | from 150% |
| Deliverability dropping | bounces and spam complaints per sent mail of the last 7 days, higher than in the 28 days before | from 3% with at least 100 mails |
| High unsubscribe rate | unsubscribes per sent mail of the last 7 days | from 1% with at least 100 mails |
A warning becomes critical from one and a half times the threshold (advertising) or twice the threshold (mail). Per kind, brand and ad campaign there is at most one active warning: while the outlier lasts, only the numbers are updated — a notification goes out when it appears and when it is raised to “critical”, not every day. Once the outlier is over, the warning is resolved; if it comes back, a new one is created.
Acknowledge means “noted”: the warning stays active while the outlier lasts but does not notify again. Check now runs the daily check immediately. Advertising warnings go to holders of marketing.ads.manage, mail warnings to holders of marketing.campaign.manage — in the brand. Every new warning is also the trigger “Marketing outlier detected” for automations, for example to pause an ad campaign on sudden spend. The autopilot also suggests pausing the campaign in its next run while a “Sudden spend” warning is open; once acknowledged, it no longer does.
The thresholds are on the warnings page under Thresholds (change with marketing.config.manage).
Fields in detail
The What it does column answers what changes in the system — not what the field is called. The grey name behind the label is the API field: the same thing runs under that name through automation, import and AI tools.
Sender profile
| Field | Required | Values / format | What it does |
|---|---|---|---|
Name name | yes | text | Only to tell profiles apart in the selection — the inbox shows the sender name. |
Brand brandId | no | one of your brands; empty = house default | Which brand the profile applies to. |
Sender name fromName | yes | text | What the recipient reads as sender. |
Sender address fromEmail | yes | email address | Must match the sending domain (SPF/DKIM/DMARC), otherwise mail ends up in spam. |
Reply-to address replyTo | no | email address | Where replies go; empty = to the sender address. |
Imprint imprint | no | text | Legal details of the brand; available as {{ imprint }} in template and footer. |
Default for this brand isDefault | no | yes/no | Exactly one profile per brand carries it — setting it takes it from the previous one. |
Active active | no | yes/no | Only active profiles can be chosen on the campaign. |
Goal metric measurement
| Field | Required | Values / format | What it does |
|---|---|---|---|
Attribution model attributionModel | no | last_touch (default), first_touch, linear | Which touches own leads and won deals go to. |
Warning thresholds
| Field | Required | Values / format | What it does |
|---|---|---|---|
Check daily enabled | no | yes/no, default yes | Off = no new warnings. |
Sudden spend from spendSpikePercent | no | 110–1000% (200) | Daily spend in percent of the average of the 14 days before. |
Minimum extra amount spendSpikeMinCent | no | cents (5000) | Only from this much more than usual; also the minimum spend of the last 7 days for “cost per goal”. |
Cost per goal from cpaRisePercent | no | 110–1000% (150) | Cost per goal of the last 7 days in percent of the 28 days before. |
Undeliverable from bounceRateBasisPoints | no | 10–5000 basis points (300 = 3%) | Bounces and spam complaints per sent mail. |
Unsubscribe rate from unsubscribeRateBasisPoints | no | 10–5000 basis points (100 = 1%) | Unsubscribes per sent mail. |
Minimum number of mails minMails | no | number (100) | This many mails in 7 days for a rate to count. |
Conversion reporting (per ad network)
| Field | Required | Values / format | What it does |
|---|---|---|---|
Network network | yes | meta, google, tiktok, linkedin, microsoft, pinterest, chatgpt | Which ad network receives the reports. |
Brand brandId | no | one of your brands; empty = brand-less | A brand-less setup applies to every brand without its own; an own, switched-off setup turns the network off for that brand. |
Send reports enabled | no | yes/no, default no | Off = nothing goes to this network. |
What is reported events | no | Lead, Deal won, Purchase | Which events go out. |
IDs settings | per network | Meta: dataset ID, test code · TikTok: pixel code, test code · LinkedIn: conversion rule per kind · Google: conversion action per kind, customer ID · Microsoft: conversion goal per kind, ad account, customer · Pinterest: ad account · ChatGPT: Pixel ID | Where the network books the report; the format is checked on save. |
Own access token accessToken | no | text, stored encrypted | Used instead of the ad connection's token; never shown again, saving it empty removes it. |
Status of a dispatch
| Field | Required | Values / format | What it does |
|---|---|---|---|
Key key | yes | short, stable text | The technical identifier for automation and reporting. Do not change it once dispatches sit on it. |
Label label | yes | text | What the user sees. |
Category category | no | open, active, done, cancelled | The business meaning behind your name. The system decides by it which dispatch is still outstanding and which counts. |
Colour color | no | colour value | Colour of the status marker. |
Order sortOrder | no | number | Position in the selection. |
Default isDefault | no | yes/no | The status a new dispatch starts on. |
Active active | no | yes/no | Off means no longer selectable. |
Settings & permissions
- Module
module.marketing— with it off, the settings tile disappears too. marketing.ads.view— see status and log of the conversion reports;marketing.ads.connect— set them
up and send again. Both apply in the brand of the report.
marketing.config.manage— the permission for statuses and sender profiles. It is pre-assigned to no role:
whoever changes the status catalogue changes it for everyone.
- The tile sits in the settings group Vertrieb & Kunden, see Settings.
FAQ & troubleshooting
I get no warning although spend went up. The comparison is with the 14 days before — a new campaign without three days of spend has no comparison yet. And only finished daily numbers count: ad numbers are pulled in the morning, the check runs at 9 am.
Why is a conversion report “skipped – no consent”? The person did not consent to ad measurement in the form (field ads_consent) — or the lead did not come through a form. Then nothing is reported, on purpose.
The network shows “Incomplete”. An ID is missing (its name is shown next to it) or access is: neither an own access token nor a connected ad connection.
I cannot see the tile. Either the module is disabled or marketing.config.manage is missing.
A status cannot be deleted. It is still in use. Rename it, or move the affected records first.
Where do I configure the sending provider? Not here, but under Integrations.
Where do I create email templates? Under Email sending & templates — templates are content, not configuration.