Advertising
Know the day ROAS drops under break-even
Break-even ROAS is arithmetic: your margin decides it, and no platform can produce it for you. The ROAS the platform reports is a different kind of number — it keeps moving for days after the fact, and it depends on which tools are connected. A floor alert is only useful if it respects both.
- Triggers
- Two
- Runs
- Every morning
- Stack
- 4 tools
- Durable execution
- Not required
The flow
Two triggers and one decision. The top track reads what the platform reports; the bottom track holds the floor you calculated. The alert fires where they cross.
Every morning
n8n schedule
Read spend and purchase ROAS
Meta Ads Insights API
Write the day's row
Sheets · Airtable
Break-even floor entered
Sheets · Airtable
Match campaign to its floor
n8n
Below the floor, on enough spend?
n8n IF
Alert the buyer
Slack · WhatsApp
Leave it alone
—
Step by step
- 01
Every morning
n8n scheduleOnce a day, after the ad account's timezone has rolled over. Checking intraday means alerting on a figure that is still being written.
- 02
Read spend and purchase ROAS
Meta Ads Insights APIRequest at campaign level with an explicit date range and an explicit attribution setting. Leave either implicit and the alert ends up comparing two definitions on two days.
- 03
Write the day's row
Sheets · AirtableOne row per campaign per day, holding the ROAS and the spend behind it. Yesterday's row is what lets you tell a bad day from a trend.
- 04
Break-even floor entered
Sheets · AirtableThe operator computes it: gross margin first, then the ROAS at which contribution reaches zero. This number belongs to the business.
- 05
Match campaign to its floor
n8nFloors differ by product line. A campaign with no floor is skipped, not measured against an average.
- 06
Below the floor, on enough spend?
n8n IFTwo tests, not one. A campaign that has barely spent will show a wild ROAS, and alerting on it teaches everyone to ignore the alert.
- 07
Alert the buyer
Slack · WhatsAppSend the campaign, the ROAS, the floor, and the spend behind it. A ratio without its denominator is not something anyone can act on.
What the platform will not allow
How far this can be automated is set by the way Meta reports return on ad spend. That boundary is the part most write-ups leave out.
Purchase ROAS is defined as the total return on ad spend from purchases, based on information received from one or more of your connected Facebook Business Tools and attributed to your ads. Change which tools are connected and the figure changes.
Marketing API — Ad Account Insights referenceThe default action attribution windows are 7-day click and 1-day view. A floor computed against a different window is not comparable to what the API returns by default.
Marketing API — Ad Account Insights referenceInsights refresh every 15 minutes and do not change after 28 days of being reported, and metrics may continue to update for a couple of days after an ad has completed. Yesterday's ROAS is provisional.
Ads Insights API — Limits and best practices
When this is not worth building
Three cases where the upkeep costs more than finding out a day late.
You do not know your gross margin per order. Without it there is no floor, and the workflow becomes an alert on a number nobody can defend.
Fewer than about five campaigns, or one campaign holding most of the spend. One person reading one dashboard each morning covers that, and covers it with more context than an alert carries.
Nobody is cleared to act on the alert. If the response to a breach is a message to a client and a wait, this is reporting, and it belongs in the weekly report rather than in a channel.