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

Ad platformMeta
Running today3 paths
Awaiting credentials3 paths
Ad Library captureDaily

The connection ledger

Three tiers, one rule: a claim earns its place here after the code that performs it exists in the repository.

01

Running today

3 entries

These paths move data right now, on a daily schedule or the moment a form is submitted.

Live

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

Live

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

Live

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

02

Built, waiting on credentials

3 entries

The code and its tests are in place. Each of these turns on once you hand over access to your own account.

On request

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

On request

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

On request

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

03

On the roadmap

7 entries

Named in the product roadmap with no connector code today. Each one arrives on this page together with the code behind it.

Planned

Telegram

Briefings and approvals

Morning briefing, alerts and batched approvals from the phone. The roadmap places it as the first operator surface.

Planned

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.

Planned

Google Analytics 4

Session attribution

Web sessions and conversion paths behind the leads already arriving through the forms.

Planned

Google Search Console

Organic queries

Queries, pages and indexing status per domain, on the bulk-import pattern already proven on another property.

Planned

Google Business Profile

Local signals

Calls and direction requests from the local listing, pending an API application.

Planned

Call tracking

Phone attribution

Phone calls stay outside attribution until a call-tracking source exists, rather than being estimated.

Planned

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.

01

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.

02

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.

03

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.

04

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.

05

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.