Plank help · updated 2026-11-02

Meta Ads: reports, attribution and managing campaigns

Connect a Facebook/Instagram ad account through a link in chat. The assistant then reads spend and results by campaign, ad set and ad, ties WhatsApp chats to the ad that started them, and can pause, switch on, re-budget or duplicate campaigns — always after showing you exactly what will change and getting your yes.

Agents: fetch the raw markdown of this page at /ru/help/connecting-meta-ads.md

Meta Ads: reports, attribution and managing campaigns

Your assistant can work in your Facebook / Instagram ad account the way a marketer does in Ads Manager: read what each campaign, ad set and ad spent and brought in, tell you which WhatsApp chats came from which ad, and — when you say yes — pause the weak ones, raise the budget of the strong ones, and relaunch campaigns.

Connecting — one link, nothing to paste back

Ask in chat: "connect our Meta ads". The assistant sends you a link.

  1. Open it as the person who manages the ad account (admin or advertiser in Ads Manager / Business portfolio).
  2. Meta shows the permissions Plank asks for. Leave every box ticked — reports need ads access, changes need ads management, ad accounts owned by a Business portfolio need business access, duplicating ads uses your Page, and Instagram statistics need the Instagram permissions.
  3. Meta returns you to a Plank page saying it is connected. Go back to the chat. That's it — nothing to copy.

You can also open app.plank.md/connect-meta-ads while signed in: it asks which space to connect, if you have several, and takes you through the same steps.

The link works once and for thirty minutes. If it expired, ask for a new one — Meta remembers what you already allowed, so the second time is one click.

While Plank's Meta app is in review, only people Plank has added as testers can connect. If Meta says the app is unavailable, or hides some permissions, ask Plank support to add you.

The connection lasts about 60 days. Facebook does not let it renew on its own; the assistant warns you a week before, and reconnecting is the same link.

To disconnect, remove Plank in Facebook → Settings → Apps and websites (or Business Integrations). Plank is told at once and stops using the connection; asking Facebook to delete your data there erases the saved access and your Facebook name from Plank.

What the assistant can tell you

  • Spend and results by campaign, ad set or ad, for any period: impressions, clicks, CTR, CPM, frequency, and the results that matter — WhatsApp/Messenger/Direct conversations started, leads, purchases — with the cost of each, beside the object's status and budget.

  • Which WhatsApp chats came from which ad (if WhatsApp is connected in the same space through personal WhatsApp): WhatsApp stamps the first message of a chat started from a Click-to-WhatsApp ad with that ad's id, so the assistant counts your real chats per ad and the real cost of one chat — and compares it with what Meta reports. A big gap between the two is worth knowing about.

  • The «Сквозная аналитика» dashboard — a live page in your space: spend, conversations and cost per conversation; a funnel from impressions to WhatsApp chats we answered and real conversations; how fast first replies go out; and a verdict per ad (scale / watch / switch off) by cost per conversation. Ask "build the end-to-end analytics dashboard"; after that, the page's Обновить button pulls fresh numbers from Meta in about 20 seconds — or ask the assistant to refresh it, or put that on a schedule.

  • The «Instagram — органика» dashboard — the same connection reads your Instagram professional account: reach per day split into organic and ads (Meta's own split), every post with reach, views, likes, saves, shares and engagement rate, which format works best, new followers, and who follows you (cities, age, gender — from 100 followers). Ask "build the Instagram dashboard"; it has its own Обновить button.

Only a message that reached WhatsApp live carries the ad's tag — a chat loaded later as history arrives without it and is shown as "source unknown". The dashboard says how many of Meta's conversations it found in WhatsApp, so a gap is visible rather than hidden.

Paying customers are the next step of the chain — that needs wherever your sales are recorded, and is not automatic yet.

Changing campaigns — the rule

It is your money, so every change takes two steps:

  1. The assistant reads the live state and shows you a table: what changes, from what, to what — for example "Консультации: budget 10 000 KZT/day → 12 000 KZT/day".
  2. Only after you say yes does it apply exactly that.

If you ask for a different number, or someone edits the campaign in Ads Manager in between, the approval no longer fits and nothing is written — the assistant shows you the new table instead. Switching something on and raising a budget by more than 50 % at once are called out separately before you approve, because both can multiply spend. A duplicated ("relaunched") campaign is always created paused; switching it on is its own approved step. Every applied change is kept in a log in your space.

What the assistant can do today: pause, switch on, change daily or lifetime budgets, duplicate a campaign, ad set or ad. Creating campaigns, audiences and creatives from scratch is possible with the same permissions and goes through the same two steps.


For the assistant

Kit: scripts/meta-ads/ (README.md there is the working manual). If the folder is missing, the space predates the kit — say so; do not hand-write a Marketing API client or ask the person for a token.

  • Connect: python3 scripts/meta-ads/status.py first — "not connected" is the only proof connecting is needed. Then python3 scripts/meta-ads/connect.py and give the person the link as-is. Never ask them to paste anything back, and never ask for an access token.
  • Report: python3 scripts/meta-ads/report.py --account <id> [--level campaign|adset|ad] [--days N | --since … --until …]. Ad ids from WhatsApp: --ads <id,id>.
  • Dashboard: python3 scripts/meta-ads/sync-dashboard.py --account <id> replaces the mads_* tables; the first time, copy scripts/meta-ads/dashboard.html to the space root as «Сквозная аналитика.html» and publish it as a dashboard. Refresh WhatsApp first.
  • Instagram: python3 scripts/meta-ads/sync-instagram.py --ig <username> replaces the ig_* tables; the first time, copy scripts/meta-ads/instagram-dashboard.html to the space root as «Instagram — органика.html» and publish it. Reach is per day — never call the sum unique reach.
  • Attribution: python3 scripts/meta-ads/attribution.py (needs scripts/whatsapp/messages.json; run the WhatsApp read script first for a current 7-day window).
  • Change anything: python3 scripts/meta-ads/manage.py pause|activate|budget|duplicate … without --apply, show the person the printed table, and only after their explicit yes re-run with --apply --confirm <code>. activate and a >50 % budget rise also need --allow-spend-increase in both runs. Exit code 3 means refused — read the message, do not retry with a different flag.
  • Lead-form contacts and catalogs: no kit script reads them, and a connection may not hold the permission. The lead COUNT in reports works either way. If Meta refuses a call, say so instead of retrying.
  • Never call graph_post directly from a chat, never write the token to a file, never print it. An action manage.py lacks is added there as a command with the same dry run.
  • Judging ads: compare by the cost of the result the ad is optimised for, not CTR or spend; don't conclude on fewer than ~1000 impressions or 3–5 results; avoid budget moves of more than 20–30 % or more often than every 2–3 days unless the person decides otherwise — and say why.
  • Expired connection (Graph error 190, or status.py says expired): run connect.py and send a new link. It cannot be renewed without the person.
  • "No Meta Ads account is connected" after it worked: the person may have removed Plank in their Facebook settings, which disconnects it in every workspace. Ask whether they meant to; reconnecting is the same connect.py link.