Every connection, with its real status.
Meta is the platform this system talks to today. The ledger below marks what moves data right now, what is built and waiting on your credentials, and what sits on the roadmap. A row moves up a tier when the code behind it ships.
Unistaff · Connections
Integrations
The connection ledger
Three tiers, one rule: a claim earns its place here after the code that performs it exists in the repository.
Running today
3 entriesThese paths move data right now, on a daily schedule or the moment a form is submitted.
Meta Ad Library
Competitor ads
A scheduled capture reads the public Meta Ad Library for a query and country, then parses advertiser, primary text, call to action and placements into Postgres. Each capture is kept as raw HTML, so a later parser change can be replayed against the same day.
Read
Daily
Web forms
Site forms and quizzes
A form posts to an HTTPS endpoint and the lead lands in Postgres. The body is capped at 10 KB before any parsing, a hidden field absorbs bots with a response identical to a real submission, and a submission carrying no contact channel comes back with the reason.
Inbound
On submit
Lead notification
Email via Resend
Each saved lead triggers one notification attempt with a five-second timeout, and the outcome is written to the log as a short code. The lead reaches the database first, so a mail failure costs a log line while the lead stays.
Outbound
On submit
Built, waiting on credentials
3 entriesThe code and its tests are in place. Each of these turns on once you hand over access to your own account.
Meta Ads — import
Graph API v25.0 · ads_read
Ad account, campaigns, ad sets, ads and daily metrics, paged through with cursors and retries. Every run is journaled with its outcome, failures included. While an account is unconnected, the screens report that state and name the missing settings.
Read
Scheduled
Meta Ads — changes
Separate write token
Pause, daily budget and campaign creation run on their own token, and everything is created paused. Before a change leaves, the kill switch, the spend caps and the autonomy matrix are checked; an action the matrix fails to recognise waits for a human decision.
Write
On approval
Meta — account link
AES-256-GCM at rest
The token is verified with a live call to Meta before anything is stored, its expiry is read back from Meta rather than guessed, and it is sealed with AES-256-GCM under a key held in the environment.
Setup
Once
On the roadmap
7 entriesNamed in the product roadmap with no connector code today. Each one arrives on this page together with the code behind it.
Telegram
Briefings and approvals
Morning briefing, alerts and batched approvals from the phone. The roadmap places it as the first operator surface.
Google Ads
Second paid channel
Search and Performance Max alongside Meta. Gated on a developer token and Basic access, scheduled after the Meta loop closes.
Google Analytics 4
Session attribution
Web sessions and conversion paths behind the leads already arriving through the forms.
Google Search Console
Organic queries
Queries, pages and indexing status per domain, on the bulk-import pattern already proven on another property.
Google Business Profile
Local signals
Calls and direction requests from the local listing, pending an API application.
Call tracking
Phone attribution
Phone calls stay outside attribution until a call-tracking source exists, rather than being estimated.
n8n
Triggers and schedules
Webhooks, triggers and schedules feeding the control plane, holding no external write rights of its own.
How a connection behaves
The same five rules apply to every source, whether it reads your ad account or writes a change back to it.
A missing key closes the path
The write client refuses before it opens a connection, and a scheduled job without its secret stays shut rather than running open. Absent configuration reads as stop.
Every attempt is journaled
Sync runs, agent jobs, change requests and approval decisions land in the database with timestamps and outcome. A failed run is recorded as a failed run.
Unconnected reads as unconnected
When a source has no credentials, the status endpoint answers with that state and names the missing settings, so an empty dashboard is distinguishable from a broken one.
Changes wait for a person
Actions of a defined class hold for a human decision, an unrecognised action holds by default, and an approval that expires stays expired. A timeout turns into consent nowhere in the system.
One switch halts outbound writes
The kill switch is checked before the mutation rather than after, and engaging it requires a written reason, so every halt stays auditable.
Frequently asked questions
Scope, setup and the limits of the write path.
Meta. The Ad Library capture runs daily, and the ads import and change paths are built and waiting on credentials. Web form intake and lead notifications run on their own path. Everything else listed on this page carries a roadmap tag.
A System User token with the ads_read scope and your ad account id. Both are entered once. The token is verified with a live call to Meta before it is stored, and it is encrypted at rest under a key held in the environment.
Changes run on a separate token that is absent by default, so the write path refuses before any network call. Once it is enabled, every object is created paused, and each mutation is checked against the kill switch, the spend caps and the autonomy matrix first.
Write to us with the system and the reads and writes you need, and we will scope it against the roadmap. A connector appears on this page when the code behind it ships.