<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss-styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AdOps — Meta Ads automation</title><description>Playbooks, engineering notes and release notes from AdOps, a rule-automation platform for Meta Ads.</description><link>https://adops.id/</link><language>en-US</language><copyright>© 2026 AdOps</copyright><managingEditor>admin@adops.id (AdOps)</managingEditor><ttl>60</ttl><item><title>Custom metrics that read your spreadsheet</title><link>https://adops.id/blog/custom-metrics-from-a-spreadsheet/</link><guid isPermaLink="true">https://adops.id/blog/custom-metrics-from-a-spreadsheet/</guid><description>An AdOps custom metric is a named value read from a Google Sheet. You give it a spreadsheet id, a sheet name, a key column and a value column, and at evaluation time AdOps matches the campaign against the key column and reads the value. That number can then be a condition threshold, a budget amount or a token in a campaign name.</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><content:encoded>A custom metric binds a Google Sheet column to a rule condition, so AdOps can act on margin, stock or a target you maintain by hand. How to lay the sheet out, where the value can be used, and how fresh it really is.</content:encoded><category>product</category><category>custom-metrics</category><category>google-sheets</category><category>rules</category></item><item><title>2.0.0 — AI rule builder for plain-language goals</title><link>https://adops.id/changelog/#v2-0-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v2-0-0/</guid><description>A free-text goal box returns rule tasks together with a confidence score from 0 to 100 The prompt is assembled from the live metric catalogue in the database, so a metric added there is available on the next request Generated tasks land in the same task list a person edits, each carrying an AI Generated badge and its confidence Every generation is written to an audit log with the request, the response, the response time in milliseconds and the confidence score</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>How the AdOps rule engine works, end to end</title><link>https://adops.id/blog/how-the-adops-rule-engine-works/</link><guid isPermaLink="true">https://adops.id/blog/how-the-adops-rule-engine-works/</guid><description>The AdOps rule engine is three parts. A dispatcher sweeps MongoDB every 10 seconds for rules whose next execution time has passed, pulls the matching campaigns from the Meta Graph API with read-only calls, and enqueues one job per ad account. A worker consumes each job, evaluates the conditions and executes the actions, then writes a per-campaign record of what happened.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><content:encoded>The dispatcher, the queue and the worker — what runs every 10 seconds, why the dispatcher cannot change a campaign, how many Meta API calls one evaluation costs, and what the engine writes down afterwards.</content:encoded><category>engineering</category><category>engineering</category><category>architecture</category><category>queue</category></item><item><title>1.9.0 — Queue progress and the slow-rule profiler</title><link>https://adops.id/changelog/#v1-9-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-9-0/</guid><description>Queue Progress lists in-flight batches with start time, rule name, ad account and an executed-of-total progress bar The worker reports progress after every campaign, so the bar advances in whole percent from 0 to 100 Slow Rule filters executions by a minimum execution time in seconds over Today, Yesterday, Last 7 days or Last 30 days A slow execution prints its per-step timing breakdown and every condition&apos;s value, operator, target and Pass or Fail</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>Dayparting rules for Indonesian Meta advertisers</title><link>https://adops.id/blog/dayparting-for-indonesian-advertisers/</link><guid isPermaLink="true">https://adops.id/blog/dayparting-for-indonesian-advertisers/</guid><description>AdOps gates a rule on the clock with two metrics, Time greater than and Time less than, each carrying a 24-hour picker and a Sunday-first weekday selector. Both boundaries are inclusive, so a 09:00 to 21:00 window covers 09:00 through 21:59, and neither metric takes a lookback period.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate><content:encoded>Two AdOps metrics gate a rule on the clock and the day of the week. How the inclusive hour boundary works, when to use the timetable instead, and how to write a night budget reset that only fires once.</content:encoded><category>playbooks</category><category>dayparting</category><category>scheduling</category><category>budget</category><category>indonesia</category></item><item><title>ROAS targets that survive contact with reality</title><link>https://adops.id/blog/roas-targets-that-survive-contact-with-reality/</link><guid isPermaLink="true">https://adops.id/blog/roas-targets-that-survive-contact-with-reality/</guid><description>A ROAS target is arithmetic, not a benchmark. Break-even ROAS equals 1 divided by your gross margin, so a 35 percent margin breaks even at 2.86x. Set your scaling target above that line, measure it over Last 7 days with a spend floor, and store the number as a custom metric so one edit changes every rule.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>A ROAS target is arithmetic from your own margin, not a number copied from a benchmark table. How to derive it, which ROAS field AdOps is actually showing you, and how to keep the number in one place.</content:encoded><category>benchmarks</category><category>roas</category><category>benchmarks</category><category>metrics</category></item><item><title>1.8.0 — Bulk activate and deactivate ad accounts</title><link>https://adops.id/changelog/#v1-8-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-8-0/</guid><description>Every ad account discovered from Meta is stored inactive until a person turns it on Selecting rows raises a bulk bar showing the number selected, with Activate and Deactivate buttons Each bulk action is confirmed in a dialog, applied to every selected account, and followed by a reload of the list The active flag is what scopes spend refresh, both ROAS cards, the spend breakdown, the campaign leaderboard and the account comparison</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><category>changelog</category><category>improvement</category></item><item><title>When to pause a Meta campaign, and when to wait</title><link>https://adops.id/blog/when-to-pause-a-campaign/</link><guid isPermaLink="true">https://adops.id/blog/when-to-pause-a-campaign/</guid><description>Pause a Meta campaign when a window long enough to be meaningful has spent enough money to be conclusive, not when today&apos;s ROAS dips. In AdOps that means a cost or ROAS condition on Last 3 days or Last 7 days, ANDed with a spend floor, paired with a name tag so the pause leaves a trace you can find later.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><content:encoded>Pause rules fail because they fire on partial windows and leave no trace. A window with spend behind it, a tag on the name, and a way back — the three parts of a pause rule that survives.</content:encoded><category>playbooks</category><category>rules</category><category>pausing</category><category>budget</category></item><item><title>1.7.0 — Purchase ROAS and Aggregated ROAS dashboard</title><link>https://adops.id/changelog/#v1-7-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-7-0/</guid><description>Purchase ROAS and Aggregated ROAS cards, each to three decimals with a trend arrow and a Profitable, Moderate or Low badge Both cards prefer Meta&apos;s own purchase_roas and website_purchase_roas fields and are requested with the unified attribution setting Four periods: Today, Last 7 days, Last 30 days and This month, opening on the last 7 days Every widget is cached per user and per period for 1 hour, with a Live or Cached indicator and a refresh that forces new numbers</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>Writing your first AdOps automation rule</title><link>https://adops.id/blog/writing-your-first-automation-rule/</link><guid isPermaLink="true">https://adops.id/blog/writing-your-first-automation-rule/</guid><description>An AdOps rule is four things: the ad accounts it watches, filters that narrow which campaigns it touches, one or more tasks that pair an action with conditions, and a schedule. Build the smallest rule that is true, set it live on one account, and read the execution log before adding a second task.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>A step-by-step build of one working Meta Ads rule in AdOps — accounts, filters, a condition, an action, a schedule — and how to read its first execution log.</content:encoded><category>playbooks</category><category>rules</category><category>getting-started</category><category>meta-ads</category></item><item><title>1.6.0 — Rule log detail with per-condition evidence</title><link>https://adops.id/changelog/#v1-6-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-6-0/</guid><description>One card per task per campaign, badged Executed, Not Executed or Skipped Condition Evaluations print the actual value against the expected value with a Pass or Fail badge, including nested AND and OR groups A Value Changes block shows the before value and the after value for budget and name actions An action still inside its cooldown is written as a skipped result carrying the reason and the time it becomes eligible again</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>1.5.0 — Live metric tokens inside campaign names</title><link>https://adops.id/changelog/#v1-5-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-5-0/</guid><description>Six tokens: a date, a time, a metric for a chosen period, a field from the campaign object, and two forms of custom metric Three placement modes, TEXT, APPEND and OVERWRITE, with a separator you supply between parts AdOps re-reads the campaign name from Meta immediately before writing, so a manual rename is not overwritten from a stale copy Every name change records the value before and the value after on the rule result</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>1.4.0 — Ten rule templates in the builder</title><link>https://adops.id/changelog/#v1-4-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-4-0/</guid><description>Ten templates across four categories: budget, status, naming and monitoring Preview shows the template&apos;s goal and every task, with its action, cooldown, values and conditions, before anything is imported Pause Unprofitable Campaigns pauses a campaign when spend is at or above 200,000 and Purchase ROAS is under 2 Tiered Budget Scaling stacks three tiers at Purchase ROAS above 3, 5 and 8, each on a 2-hour action cooldown</description><pubDate>Thu, 04 Dec 2025 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item><item><title>1.3.0 — Custom metrics read from Google Sheets</title><link>https://adops.id/changelog/#v1-3-0/</link><guid isPermaLink="true">https://adops.id/changelog/#v1-3-0/</guid><description>A custom metric stores a spreadsheet ID, a sheet name, a lookup column and a value column Rows are fetched from Google&apos;s CSV export endpoint with a 30-second timeout, falling back to the Sheets API client and then to the last copy AdOps mirrored A custom metric is selectable as a condition metric, a comparison metric, a budget amount and a campaign-name token Saving a metric reads the sheet first and refuses the save if the lookup column or the value column is missing</description><pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate><category>changelog</category><category>feature</category></item></channel></rss>