Import guide
Import Google Analytics data into monday.com
Google Analytics answers a question with a table: a day, something to break it down by, and a few numbers beside it. That table is where the monday.com work starts — which pages earn the enquiries, which sources bring the visitors worth following up, which events people actually trigger — and getting it onto a board means exporting a CSV and pasting it, which is a snapshot with no history and no way to see it move.
Boardfeed reads one GA4 property on a schedule and writes one item per day into a monday.com board. The credential is not a key you paste: you connect the Google account that can see the property, once, and Boardfeed stores the account — not the token — against the source. It is the same connection a Google Search Console source reads with, so a board that already imports search data needs no second sign-in.
Last checked : the four reports and the columns each one reads, the date conversion, the window and the property list, read off the connector — whose endpoints are marked unverified in docs/connectors.md § Google Analytics until the Google app exists, and this page repeats that position rather than claiming more
Doing it by hand, every time
- Open Analytics, set the date range, pick the report, and export it as a CSV.
- Upload the file to the board and map the columns again, every time.
- Remember which breakdown the last export used, so the numbers line up.
- Do it again next week, and keep the old files somewhere if you want a trend.
The scheduled route
- Connect the Google account that can see the property. Boardfeed opens Google’s own consent screen in a small window, asks for **read-only** Analytics 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. If Google is already connected for a Search Console import, the account is in the select and there is nothing to sign in to again.
- Choose the property from the list Boardfeed reads back. Analytics answers with every account the connection can see and the properties under each, so the entry reads as the account and then the property — **Account › Property** — and a property is picked from that list rather than typed.
- Choose the report. One import reads **one** of the four, and one row is one day: **Traffic** reads the day as a whole, **Pages** breaks it down by page, **Sources** by where the visits came from, and **Events** by event name. A board that wants two of them is two imports.
- 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.
- Key the import on the day and the breakdown — `date` and `pagePath`, or `date` and `sessionSource` — 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 Analytics
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.
- What one row holds depends on the report, and nothing is renamed or computed on the way: **Traffic** carries `date`, `activeUsers`, `sessions`, `screenPageViews`, `engagedSessions` and `conversions`; **Pages** carries `date`, `pagePath`, `screenPageViews` and `activeUsers`; **Sources** carries `date`, `sessionSource`, `sessionMedium`, `sessions` and `activeUsers`; **Events** carries `date`, `eventName`, `eventCount` and `activeUsers`.
- `date` is the one value Boardfeed converts. Analytics writes a day as `20260920` and a monday Date column wants `2026-09-20`, so the conversion is done for you and the column reads as a date.
- The numbers arrive as **text**, exactly as Analytics answers them (`41`, not a number 41). Map them to a Numbers column 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.
- `engagedSessions` and `conversions` are the two that surprise people. `conversions` counts the events the property marks as conversions, and a property that has not marked any answers `0` rather than leaving the day out — so a zero on the board is a real zero, not a missing read.
- `sessionSource` and `sessionMedium` are Analytics’ own words for where a visit came from, such as `google` and `organic`, or `(direct)` and `(none)`. They map well to a text column, and a busy property’s long tail collects under `(other)`.
- The day a scheduled import wrote yesterday can change today, because Analytics keeps processing and re-attributing recent data. Boardfeed reads whatever the property answers at the moment the run starts; an import keyed on the day and the breakdown, in update mode, is what keeps the board matching the current report rather than last Tuesday’s.
Google Analytics import questions
Do I need a Google Cloud project, a service account or an API key?
No. You connect a Google account, from the source dialog, and Google asks that account whether Boardfeed may read Analytics for it — read-only, and nothing else. There is no key to create, paste or rotate. The report itself is read from Google’s own reporting API, which is the same data the Analytics interface shows you.
Which properties can I import?
The ones the connected account can see. Boardfeed asks Analytics for the accounts and their properties and shows them in the source dialog as Account › Property — the property is chosen from that list rather than typed. A property the account cannot see fails on the first run with a sentence saying so, so it is worth pressing Check connection after connecting an account with several.
Can I import two reports, or two properties?
Yes, as one import each: one import reads one report of one property. That is deliberate rather than a limitation of the schedule — each import has its own mapping, its own key and its own history, and mixing two reports into one board would mean either two row shapes or a column set neither of them fills.
How much data does one import read?
As much as the window holds. A run walks the report 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 a property is that busy.
Does Boardfeed write anything back to Analytics?
No. The permission it asks for is read-only, and the connector only reads: it lists the properties and runs one report, and issues no writes of any kind. 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.