Import guide
Import Facebook Ads results into monday.com
Ads Manager holds the money side of a campaign and monday.com holds the work that follows it — the follow-ups, the creative briefs, the budget conversation. Joining the two by hand means pulling the same report out of Ads Manager again every time somebody asks how last week went.
Boardfeed reads one ad account’s results on a schedule and writes one item per **day per campaign** — or per ad set, or per ad — into a monday.com board. The credential is not a key you paste: you connect the Meta account that can see the ad account, once, and Boardfeed stores the account rather than the token against the source.
Last checked : the three levels, the five breakdowns, the columns one row holds, which entries of actions become columns and which do not, the window, and the currency rule, all read off the connector — whose Graph endpoints and version are the controller’s own read of 2026-09-20, recorded in docs/connectors.md § Facebook Ads
Doing it by hand, every time
- Open Ads Manager, set the date range and the breakdown, and export the report as a CSV.
- Upload that file to the board and map the columns again, every time.
- Do it again tomorrow, and keep yesterday’s file somewhere if you want to compare the two.
- Work out which rows are new and which are already on the board, or accept a second copy of every day.
The scheduled route
- Connect the Meta account that can see the ad account. Boardfeed opens Meta’s own consent screen in a small window and asks for **read-only** access to your ads, stores the connection encrypted (AES-256-GCM), and never lets a token reach the board, the browser or a log. You can revoke the account from the Support tab at any time.
- Choose the ad account from the list Boardfeed reads back. One entry per account, labelled with the currency it spends in, and an account Meta has closed is marked `closed` so you do not point an import at one.
- Choose the level: **campaign**, **ad set** or **ad**. One import reads one of the three, so a board that wants a campaign’s spend and the ads behind it is two imports.
- Choose how many days back to read. Left empty it is the last 28 days, and the run counts back from the day it runs — which is what makes the next step matter.
- Key the import on the date and the campaign (or the ad set, or the ad) and run it in **update matching items** mode. A scheduled import re-reads its whole window every time it runs, so the key is what keeps a day from being written twice; in create mode, running the same window twice is two sets of items, which is the mode rather than a bug.
- Every run reads one row per day, up to 500 rows at a time, and follows Meta’s own cursor until the answer stops offering a next page.
Field mapping notes for Facebook Ads
This is the part that decides whether an import works on the first try. Everything below is handled in the mapping step, before the first run.
- One row is one day of one campaign, ad set or ad: `date`, the account and campaign ids and names, `impressions`, `clicks`, `spend`, `reach`, `frequency`, `cpc`, `cpm`, `ctr` and `currency`.
- The level decides which id columns exist. A campaign-level row has no `ad_id`, and an ad-set-level row has no `ad_id` either — deliberately, rather than as a column that is empty on every row and in the way of the ones that matter.
- `spend` is in the **ad account’s own currency**, as Meta reports it, and the `currency` column says which currency that is. Nothing is converted — not to your board’s currency, and not to minor units. Keep the currency beside the amount and let monday.com format it.
- Every number arrives as the text Meta sends, `"184.52"` rather than a number Boardfeed decided it was. Map `spend` to a Numbers column and monday.com reads it as 184.52; map it to Text and the string is kept as it came. Nothing is rounded and no decimal separator is guessed at.
- Meta returns a long list of `actions` — link clicks, landing page views, video views, purchases, leads and dozens more — and exactly **three** of them become columns: `actions.purchase`, `actions.lead` and `actions.link_click`. The rest are dropped rather than turned into columns nobody asked for.
- Nothing is summed: a 28-day report is 28 items per campaign, and the rollups belong on the board, where the people reading it can see what is in them.
Facebook Ads import questions
Do I need a Meta app, an ads token or a developer account?
No. You connect a Meta account from the source dialog: Meta asks that account whether Boardfeed may read its ads — read-only, and nothing else — and Boardfeed resolves a token for it when a run starts. There is no key to create, paste or rotate by hand, and the token is never shown on the board or in a log.
Which ad accounts can I import?
The ones the connected account can see. Boardfeed asks Meta for the list and shows it in the source dialog, each account labelled with the currency it spends in. An account Meta has closed is still listed, marked `closed` — it is one Meta returned, and knowing it is closed is better than wondering why an id is missing.
Why is the import longer than the number of days I chose?
Because a row is one day of one campaign, ad set or ad. A 28-day window over twelve campaigns is up to 336 rows, and adding a breakdown — age, gender, country or publisher platform — splits each of those by the dimension again. Read the row count the preview reports before you schedule it, and check it against your monthly allowance.
Do the numbers change after they have been imported?
Meta revises them. A conversion can be attributed days after the click, so the spend and the results of a recent day keep settling, and an import in update mode writes the new figures over the old ones on its next run. That is also why the window is not incremental: there is no “since the last run” mode, and none is needed while the key updates rather than duplicates.
Does Boardfeed change anything in my ad account?
No. The permission it asks for is read-only (`ads_read`), and the connector only reads: one insights request per page of results and nothing else. It does not create, edit, pause or delete a campaign, an ad set or an ad, and it reads no audience, no creative library and no billing setting.
What happens if the connected account is revoked or expires?
The next run fails with a sentence naming the account and is recorded in the run history like any other source error; nothing is written to the board. Reconnect the account from the source dialog and run it again. Disconnecting an account in the Support tab names the imports that read it before it revokes anything, so you can see what a disconnection would break.