Import guide

Import Google Ads data into monday.com

Google Ads answers a question with a table: a day, a campaign or an ad group or an ad, and the money and the clicks beside it. That table is where the monday.com work starts — which campaign earns its budget, which one quietly spends it — and getting it onto a board means exporting from the Ads interface and pasting it, which is a snapshot with no history and no way to see it move.

Boardfeed reads one Google Ads customer on a schedule and writes one item per day per campaign, ad group or ad, into a monday.com board. The credential is not a key you paste: you connect the Google account that can see the account, once, and Boardfeed stores the account — not the token — against the source. It is the same connection a Google Search Console or Google Analytics source reads with, so a board that already imports either of them needs no second sign-in.

**One thing is asked for that is not yours.** Google Ads refuses every request that does not carry a developer token, and that token belongs to Boardfeed rather than to any customer: it is issued to the application, not to your account, and it is set once on the deployment. If it has not been requested yet, the Google Ads source is not offered at all — the import dialog lists the other sources and this one is simply not among them, rather than appearing and failing on the first run.

Last checked : the three levels and the columns one row holds, the two micros conversions, the currency column, the window and the customer list, read off the connector — whose endpoint, version and metric names are marked unverified in docs/connectors.md § Google Ads until Boardfeed’s developer token exists, and this page repeats that position rather than claiming more

Doing it by hand, every time

  1. Open Google Ads, set the date range and the level, and download the report as a CSV.
  2. Upload that file to the board and map the columns again, every time.
  3. Check the currency the exported figures are in, because the export uses the account’s own.
  4. Do it again next week, and work out which rows the board already has.

The scheduled route

  1. Connect the Google account that can see the account. Boardfeed opens Google’s own consent screen in a small window, asks for **read-only** access, and stores the connection encrypted (AES-256-GCM). No token reaches the board, the browser or a log, and the account can be revoked from the Support tab at any time. The permission is the same one the other Google sources ask for, so a board that already imports Search Console or Analytics has this account in the select already.
  2. Choose the customer from the list Boardfeed reads back. The list is every customer the connected account can reach, each labelled with the currency that customer is billed in — press **Check connection** to fill it in. A customer id pasted from Google Ads, dashes and all, is accepted too; the dashes are dropped for you.
  3. Choose the level: **campaign**, **ad group** or **ad**. One import reads one of the three, and every row carries the levels above it — an ad row names its campaign and its ad group — so a board that wants both the campaign’s cost and the ads behind it is two imports.
  4. Choose how many days back to read. Left empty it is the last 28 days, counted back from the day the run starts, so a scheduled import re-reads the same window every time. That is why the next step matters.
  5. Key the import on the day and the id — `date` and `campaign_id`, say — and run it in **update matching items** mode: a fresh run then updates the item it already wrote instead of adding a second copy of the same day. In create mode, running the same window twice is two sets of items; that is the mode, not a bug.

Field mapping notes for Google 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 group or ad: `date`, the ids and names of the level and of the levels above it, `impressions`, `clicks`, `cost`, `ctr`, `average_cpc`, `conversions` and `currency`.
  • The level decides which id columns exist, deliberately: a campaign-level row has no `ad_id`, and an ad-group-level row has no `ad_id` either, rather than carrying a column that is empty on every row.
  • `date` needs no conversion: Google writes it as `2026-09-20` and that is what the column holds.
  • **`cost` and `average_cpc` are converted for you, and the conversion is the point of the `currency` column.** Google reports both in millionths of the currency unit — a €12.34 day comes back as `12345678` — and Boardfeed divides that by a million and writes it as a decimal string, `"12.345678"`. So `cost` and `average_cpc` are in the customer’s own currency, `currency` says which currency that is (for example `EUR`), and nothing is converted between currencies. Keep the two together on the board and let monday.com format the amount.
  • `ctr` and `conversions` arrive exactly as Google sends them: `ctr` as a ratio (`0.04` is 4 %), `conversions` as a count that can be fractional, because Google attributes a share of a conversion when more than one click led to it.
  • `impressions` and `clicks` arrive as **text**, exactly as Google answers them. Map them to Numbers columns and Boardfeed converts them as it writes the item — the preview marks them as text because that is what the source sends, so do not take that suggestion for the column type.
  • The day a scheduled import wrote yesterday can change today, because Google keeps attributing conversions and adjusting the data of recent days. Boardfeed reads whatever the customer answers at the moment the run starts; an import keyed on the day and the level’s id, in update mode, is what keeps the board matching the current report rather than last Tuesday’s.

Google Ads import questions

Do I need a Google Ads developer token, a manager account or an API key?

You do not need one of your own, and there is nothing for you to paste: the developer token Google Ads requires is Boardfeed’s, it is set once by whoever runs this deployment, and it is what turns the source on for everybody. If the Google Ads source is not in the source list at all, that token has not been issued yet. You still need a Google account that can see the customer, and that account is connected from the source dialog like any other Google source.

Which customers can I import?

The ones the connected account can reach — usually one, and sometimes several if the account sits under a manager account. Boardfeed asks Google Ads for the list and shows it in the source dialog, each customer labelled with its currency. An account reached **through a manager account** is the one case this import does not cover yet: Google Ads needs a second header naming the manager, Boardfeed does not send it, and a run against such a customer fails with Google’s own refusal rather than reading the wrong account.

Why is the cost a long decimal rather than a rounded amount?

Because that is the figure Google reported. Google Ads counts money in millionths, so `12345678` micros is exactly €12.345678 and Boardfeed writes that, to the digit, rather than rounding it to two places — monday.com’s own formatting decides how it is displayed, and the underlying number stays exact for a sum or a chart. `average_cpc` works the same way. The `currency` column says which currency the two are in.

Can I import two levels, or two customers?

Yes, as one import each: one import reads one level of one customer. That is deliberate rather than a limitation of the schedule — each import has its own mapping, its own key and its own history — and an ad-group row already names the campaign it belongs to, so two levels on one board is usually not the answer to begin with.

How much data does one import read?

As much as the window holds. A run reads 10,000 rows at a time and stops at 200 pages — 2,000,000 rows — rather than importing part of a longer window: reaching the limit ends the run as failed, with the number of rows it had already written, and those rows stay on the board. A shorter window is the lever if an account is that busy.

Does Boardfeed write anything back to Google Ads?

No. The permission it asks for is read-only, and the connector only reads: it lists the customers and runs one report per import, and issues no writes of any kind — no campaign, no budget, no conversion setting is touched. The connected account can be revoked from the Support tab, which tells Google to forget the grant and removes the stored connection.

What happens if the connected account is revoked or expires?

The next run fails with a sentence naming the account, 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.

A run failed with a sentence about the developer token. What do I do?

Tell whoever runs the deployment: that sentence is Google refusing Boardfeed’s own developer token rather than anything about your account. The commonest cause is a token that is still at Google’s **test** access level, which reads test accounts only, and the run history says so. Your account and its connection are fine, and nothing is written to the board until the token is sorted out.

Other sources