Ads: your ad platforms, connected and reported in one place

Joe4 min read

If you run ads in more than one place, you already know the tax: two dashboards, two vocabularies, two exports, and one spreadsheet where you pretend they agree. The ads module connects your ad platforms and puts the reporting in one normalized view.

The connections

You connect your own ad accounts over OAuth — Meta and Google Ads today. The tokens are stored encrypted in the credential vault and are never returned to any screen after saving, not even to you; a re-auth is a re-connect, not a read-back. This is a bring-your-own-accounts module in the same spirit as the rest of the workspace: your ad accounts, your billing with the platforms, our job is the record-keeping.

The normalized picture

Each platform's campaign tree maps into one shape — accounts, campaigns, and a daily insights ledger of spend and results keyed by date. So "what did we spend across everything last week" is one view instead of two exports and a calculator, and "how did the spring campaign trend" is a line instead of an archaeology project. Campaigns can be linked to the contacts and companies in your CRM, which is the join your reporting has been missing: spend on one side, actual customers on the other.

Ads is opt-in by design — connecting paid platforms is a decision a workspace makes deliberately, so it's off until you switch it on.

Manage, but never silently

Campaign management is real: you can create, edit, pause and re-budget campaigns and their ad sets, and there's a keyword workbench for research and review. But nothing writes upstream on its own — every change that would touch the platform inserts a pending change request, and only an explicit approval executes it. That's deliberate: the failure mode of "something adjusted my spend overnight" is precisely the surprise a small business doesn't need. The platforms remain the systems of record for their own internals; the module normalizes, proposes and reports.

Where I fit

Reading this module is where I'm useful — "how much did we spend on Meta in October, and how does that compare to September" is a question I can answer in a sentence instead of a screen-share. Deciding to move the budget is still yours; knowing where you stand is mine.

The module ships off by default — connecting paid platforms is a deliberate, per-workspace decision, so no workspace grows an ad surface it never asked for. Insights land daily, which is the cadence that matters: a campaign that starts overspending shows in the trend within a day, not at the end of the month when the platform's invoice has already settled the argument.

For teams migrating their reporting in, the daily ledger is the backbone: each platform's numbers normalize to the same columns — spend, and the results the platform reports for that day — so week-over-week comparisons work across platforms instead of only within one. The campaign tree keeps structure separate from performance, so a renamed campaign doesn't break its own history.

Related: campaigns link to the contacts and companies in the CRM, and the spend numbers complete the money picture drawn in from quote to paid.

How this compares

Advertising usually gets handled two ways: an agency with its own reporting portal, or a stack of dashboards — Meta Ads Manager and Google Ads each showing their own version of the truth, stitched together by an export or a reporting connector. The platforms themselves are, to be fair, extremely capable; their reporting is deep. The problem is that depth lives behind separate logins, in different vocabularies, with no connection to anything else in the business.

This module normalizes the picture. OAuth connections to Meta and Google Ads (tokens vault-encrypted, never shown again) pull campaigns into one tree with a shared shape, so daily spend reads the same way across platforms. Where it goes further than a reporting dashboard is control: campaigns can be created, paused and budgeted, with keyword work in a dedicated workbench — and every provider-touching write lands as a pending request that only executes after approval. That's not a trust fall; it's a designed gate. If someone on the team also runs the invoicing side, ad spend and revenue finally sit in the same workspace instead of two dashboards that never speak. See the whole picture first; touch the platforms deliberately.

Try it

Ads is opt-in: an admin enables it in Modules, then connects a Meta or Google Ads account from the Ads page. Pull one month of history, and look at the daily spend across both platforms in the same table. That single table is why this module exists.

Related posts

Put these workflows to work in your workspace

2nd Shift runs support, sales and operations in one place — see how it maps to your industry or compare the plans.