Automations

Schedules, pulls, agent steps, and how to add an integration.

An automation is a schedule plus an ordered list of steps. Every step names a canvas, and the canvas is the context between steps: whatever a pull landed, the next agent step sees. There is no separate output node. Find them under Automations in the sidebar, or open one straight from an example on the automations page.

Schedules and steps

Schedules are daily, weekdays or weekly at a wall-clock time in your time zone, which is read from the browser when you create the automation. Two step types exist today:

Up to six steps per automation. A pull followed by an agent step is the common shape: the pull lands the material, the agent works on it. An automation with only agent steps is a scheduled review of whatever is already on the canvas.

Start from an example. The Automations page offers filled-in examples. Weekly creative report is the pull-then-agent loop with the brief already written; you only pick the account and the canvas. Friday UX review, Brand and accessibility check, Weekly copy pass and Nightly polish are agent-only. Links of the form /automations?example=creative-report create the automation from that example and open its editor.

Connect Meta

Open Integrations in the sidebar, or press Connect Meta on a pull step. Doop sends you to Meta's consent screen asking for ads_read only, exchanges the code for a long-lived token, and lists the ad accounts that token can read. The token is stored server-side and never appears in API responses; the Integrations page shows the account name, the ad accounts and when the token expires.

What a pull lands

One frame per creative, in a four-column grid below whatever is already on the canvas, under a scoreboard frame:

Numbers cover the last 7 days, from Meta's ad-level insights. Results follow the objective the way Ads Manager does: purchases first, then leads, sign-ups, installs, adds to cart, landing page views, link clicks. Cost per result uses the same action. An ad that served nothing in the window shows No data. A pull fetches up to 200 ads.

Verdicts

Each ad gets one of four verdicts. They are computed from the numbers, not by a model, so they are the same every run:

The ranking is results first, then cost per result, then CTR. The scoreboard carries a one-line key so an agent reading it knows what each verdict asks for.

Writing the agent brief

The prompt is the brief. Say what to read first, what to do per verdict, and what shape the output should take. The example brief:

Read the scoreboard frame first: it ranks every ad by last week's results
with a verdict per ad. For each ad marked "scale", make three variants as
new frames next to it that keep what works (the offer, the visual, the
tone) and change one thing each: a sharper hook, a different visual
hierarchy, a shorter copy version. For each ad marked "refresh", make one
new creative next to it that keeps the offer but changes the hook and the
visual, so it reads as a new ad to people who have seen the old one. Leave
"watch" ads alone. Keep the brand intact and put the copy for every new
frame in its own headline, body and CTA so it can go straight into Ads
Manager.

Any resident role can take the step: Doop for new creatives, the UX Lead for flows, the Copywriter for headlines, Brand and Accessibility for checks. One role per step; chain steps for a pipeline.

Runs and failures

The scheduler checks every minute for automations that are due and runs each one's steps in order. Every run is one line in the Runs tab: when it started, what happened, and where. A summary reads like 3 new creatives, 20 refreshed · scoreboard updated · card queued for Doop.

Build an integration

Doop is open source, and Meta is the reference integration. An integration is a server module that connects an account, lists what the user can pull from, and lands frames on a canvas. Here is where the Meta one lives, which is also the map for adding another:

Three conventions are worth keeping whatever you connect:

Today those touch points are wired by hand; a single provider interface that collapses them into one file is on the roadmap, and contributions that move toward it are welcome. Read CONTRIBUTING.md first, open an issue naming the service and whether it pulls, pushes or both, and start from the Meta files above. The other sources that already land frames, the GitHub import, the website import and the sync snippet, follow the same marker convention and are worth reading alongside.