Log in Get a demo Try it free
Solutions AI Dashboards AI Insights AI Data Exports AI Alerts
MCP connector Upbuild in Claude Upbuild in ChatGPT Upbuild in Copilot Studio Upbuild in Gemini Enterprise
Platforms Resources Contact
Log in Get a demo Try it free

Upbuild / AI Data Exports

AI data exports in, BigQuery and Sheets out

Pipelines you set up by asking.

An export takes a data stream, runs it for every account you point it at, on a clock you set, and writes the rows into BigQuery or Google Sheets. You change it by sentence, and every change is a version you can restore.

Every platform on one subscription

Google AdsMeta AdsTikTok AdsSnapchat AdsDisplay and Video 360Campaign Manager 360Google Analytics 4Adobe AnalyticsGoogle Tag ManagerAdobe TagsGoogle BigQueryGoogle Sheets

The anatomy

Every export, on its clock.

One export is one data stream, a list of accounts, one or more pulls and one destination. The stream says what to ask for. The accounts say who to ask it of. Each pull carries its own time, its own date window and its own write mode, so a daily pull can merge the last seven days into the same table a monthly pull rewrites in full.

Several rhythms, one table

Every day at 06:00, every Monday, day 3 of the month, every N days, or only when you press Run now. Each pull writes by merge, append or replace, whichever suits that rhythm.

Accounts that keep themselves in step

Pick them by hand, or write a rule: names starting with, containing or matching a pattern, minus the ones you exclude. The rule is checked nightly and before every run.

See the platforms it reads
Data Exportsv7 · current

Every export, on its clock

It pulls a data stream for as many accounts as you choose, and delivers the rows to the destination you choose.

StreamCampaign performance daily
Toolgads_campaign_performance
Dateslast 90 days (the stream's own)
Every day06:00 · 7 days ago to yesterday · merge by keys
Spread2 accounts over 30 minutes, never more than five calls in flight
Writesevery day: merge by account_id, campaign_id
Last write09/09/2026 12:15 · 140 rows · OK

Change it

The schedule you change by sentence.

Every export has a panel called "Ask about this export", and its opening line is the whole contract: it knows the stream, the accounts, the pulls, the destination and the mails, and every change it makes is a version you can restore. Say "pull the last 30 days on the monthly run" and the monthly pull moves. No YAML file, no ticket.

It has the buttons, not just the settings

Pause the clock, resume it, run one pull now, retry only the accounts that did not land, restore an older version, duplicate the export, or share it with a colleague as viewer or editor.

Nothing here is a one-way door

Every save is a numbered version with its author and a note, sitting in a picker beside the tabs. Choosing an older one does not change the export until you press Restore.

How the same assistant reads your accounts
Change itv7 → v8

Ask about this export

Ask me to change this schedule. I know its stream, its accounts, its pulls, its destination and its mails, and every change I make is a version you can restore.

pull the last 30 days on the monthly run
MovedEvery month, day 1 · 06:00 · 30 days ago to yesterday · replace everything
UntouchedEvery day · 06:00 · 7 days ago to yesterday · merge by keys
Saved asversion 8 · RESTORABLE
Suggested nextChange the write mode · Add or remove accounts · Who gets the mails

Extract, transform, load

AI ETL with the load step included.

Extract: Upbuild walks each platform's API page by page, per account, resuming from the last page it read. Transform: rows are flattened, typed and given four columns of Upbuild's own. Load: the rows go into a staging table, then one MERGE, INSERT or REPLACE statement, then the staging table is dropped. That is a marketing data pipeline, and the only thing you wrote was a sentence.

Four columns are added to every row

account_id, account_name, connection and fetched_at, so forty accounts can share one table and you can always tell whose row you are looking at. run_id and version are optional extras.

The types are chosen so they hold

Every number lands as FLOAT64, because a metric that was 12 yesterday and 12.5 today should not break a column. Dates and timestamps are recognised, nested values travel as JSON text.

Dashboards read the same streams
Outcomebefore you save

What lands in the table

Drawn from the rows the stream's own test returned. The green columns are Upbuild's, so many accounts can share one table.

ColumnTypeSource
account_idmerge keySTRINGUPBUILD
account_nameas the platform names itSTRINGUPBUILD
fetched_atwhen this pull ranTIMESTAMPUPBUILD
date_startthe day the row coversDATESTREAM
campaign_idmerge keySTRINGSTREAM
cost_microswhole today, fractional tomorrowFLOAT64STREAM

Setting one up

Five steps, and no pipeline to write.

The new export wizard asks for the same five things every time: Data stream, Accounts, When, Destination, Outcome. Or skip it entirely and ask the panel, which fills the same five in, one question at a time, saving each answer as you give it.

Data stream, then accounts

Choose a stream that already exists, built for a dashboard or saved from an answer in chat. Then pick the accounts under your managers, or write the rule that finds them. You only ever see the accounts your own login can reach.

When, and where

Add a pull for each rhythm you need, each with its time, its dates and its write mode. Point it at a BigQuery project, dataset and table, or at a Google Sheets tab. Name the key columns if it merges.

Outcome, then save

The last step shows the columns that will land before a single row moves. Anything unfinished stays a draft, and a draft has no clock, so a half-built export never writes to your table by accident.

Straight answers

The questions a data team asks first.

Written for the people who will own the table afterwards.

What happens when a run fails?

Failure is per account, not per run. An account the platform brakes goes to waiting and is asked again a quarter of an hour later, up to eight times: two hours of patience before anything is called a failure. A write fault is retried five times. The run finishes done, partial or failed, the mail names the accounts that did not land in the platform's own words, and Retry runs only those. A run that fails outright writes nothing.

How does it behave across dozens of accounts?

One export runs its stream for every account you point it at, spread over 30 minutes with never more than five calls in flight, so it does not exhaust a platform's hourly allowance and starve everything else. The work runs in twelve-minute ticks and resumes from the last page read, so nothing depends on a request staying open. One live organisation reaches 859 accounts and runs 101 self-refreshing dashboards on the same connections.

Is this really ETL, or just an export?

Rows are extracted from every platform's API page by page, flattened, typed and stamped with account and fetch columns, then loaded through a staging table and one MERGE, INSERT or REPLACE statement, in a single transaction where it matters. Merging on keys means a restated day heals instead of duplicating. What it is not: a modelling layer. Upbuild lands typed source tables and leaves the modelling to your own SQL.

How is this different from a per-connector pipeline?

Three ways, all honest. The schedule is configured in English and versioned, so changing a window is a sentence rather than a redeploy. Every platform sits on one subscription instead of a line per source. And the same streams already feed dashboards and chat, so the warehouse pipeline and the reporting on top of it are not two purchases. If all you need is raw Google Ads to BigQuery, a plain connector is a reasonable choice.

Your project, your rules

It writes where you say, and nowhere else.

The destination signs in one of three ways: with the Google login of the person who connected it, with a service account key you paste, or with Upbuild's writer identity, granted on the one dataset you choose. Upbuild creates the table if it is missing, never creates a dataset, and never deletes a table it did not make.

1Subscription covering every source, Google Ads and Meta to Adobe Analytics
2Destinations shipped today: Google BigQuery and Google Sheets
5Calls in flight at most, so one export never eats an hourly allowance
859Accounts reachable from a single organisation in Upbuild today

Get in touch

Tell us which platforms and how many accounts you need in BigQuery.

  • Bring your own BigQuery project, your own service account key, or grant Upbuild's writer identity on one dataset
  • We will land one of your real streams in a real table before you commit to anything
  • Security review pack, data processing terms and subprocessor list on request