DEV Community

RAXXO Studios
RAXXO Studios

Posted on • Originally published at raxxo.shop

5 agent-browser Workflows That Replaced My Manual Daily Checks

  • Replaced 5 manual daily checks with agent-browser scripts saving 6 hours per week

  • Slack unread sweep across 14 channels runs in 22 seconds, replaced a 40 EUR/month notifier

  • IG insights pull every morning, killed a 29 EUR/month analytics SaaS

  • Shopify order check and syndication status sweep run before coffee

  • Competitor pricing watch fires a desktop notification when 3 rival stores move price

I used to start every morning with 12 browser tabs and a checklist. Slack, Instagram, Shopify, Dev.to, Hashnode, three competitor stores. By the time I finished checking everything, two hours were gone and the actual work had not started. So I wrote 5 agent-browser scripts that do the rounds for me. Total time saved: about 6 hours per week.

Here is what each one does, the actual command shape, and what it replaced.

1. Slack Unread Sweep Across 14 Channels

The first script is the one I run before I even open my laptop properly. It walks 14 Slack channels, captures any unread count above zero, and prints a single block of text I can scan in 10 seconds.

Old workflow: open Slack, click every channel, mentally track which ones moved. Took about 8 minutes a day, longer if I got distracted in the first channel I opened. I had also tried a paid Slack notifier at 40 EUR per month that flooded me with desktop pings I learned to ignore.

The agent-browser version connects to my already-running Chrome, navigates to each channel URL, reads the unread badge, and writes a summary to a file.


// slack-sweep.js
const channels = ['general', 'dev', 'design', 'sales', 'support'];
for (const ch of channels) {
  await page.goto(`https://app.slack.com/client/T0XXX/${ch}`);
  await page.waitForLoadState('networkidle');
  const snap = await page.snapshotForAI();
  const unread = snap.match(/(\d+) unread/)?.[1] || '0';
  console.log(`${ch}: ${unread}`);
}

Enter fullscreen mode Exit fullscreen mode

I run it with dev-browser --connect ./slack-sweep.js. The connect flag attaches to my logged-in Chrome session, so no auth dance. Total runtime: 22 seconds for all 14 channels.

The script also writes the output into my terminal statusline, so when I cd into any project I see a number like "Slack: 3 channels active" without having to switch apps. That nudge replaced the panicked "did I miss something" feeling that used to drag me back into Slack three times an hour.

Time saved per week: roughly 50 minutes. Money saved: 40 EUR per month from killing the paid notifier.

2. Instagram Insights Pull, Daily

Instagram does not have a clean API for personal accounts. The Graph API needs a Business account and OAuth dance, and even then the daily insights data is two days behind. So I scrape my own insights page instead.

Old workflow: open IG on phone, tap profile, tap insights, screenshot, type the numbers into a spreadsheet. Eight taps, every morning. I also paid 29 EUR per month for an analytics SaaS that mostly showed the same numbers IG already shows for free.

The script opens the insights page, captures impressions and reach for the last 7 days, and appends one row to a CSV.


// ig-insights.js
await page.goto('https://www.instagram.com/raxxostudios/insights');
await page.waitForSelector('[role="tab"]:has-text("Last 7 days")');
const snap = await page.snapshotForAI();
const impressions = snap.match(/Impressions[\s\S]+?(\d[\d,]+)/)?.[1];
const reach = snap.match(/Reach[\s\S]+?(\d[\d,]+)/)?.[1];
const today = new Date().toISOString().slice(0, 10);
require('fs').appendFileSync('ig-daily.csv', `${today},${impressions},${reach}\n`);

Enter fullscreen mode Exit fullscreen mode

The snapshotForAI() call is the key trick. It returns a flattened DOM string that is dramatically easier to regex than raw HTML. I learned that pattern from the dev-browser README and have leaned on it for every script since.

Time saved: 10 minutes per day. SaaS cancelled: 29 EUR per month.

One thing to watch: Instagram changes the DOM structure roughly every 6 weeks. My script broke twice in 3 months. Each time the fix was a 5-minute regex tweak after re-running snapshotForAI() and seeing what the new labels looked like. Compared to the SaaS I cancelled (which broke for 11 days in February and went silent on support), I will gladly take a 5-minute fix every other month.

3. Shopify Order Check Before Coffee

I run Shopify for raxxo.shop and like to know overnight orders the moment I sit down. The admin app on phone is fine but it forces me into the phone before I have decided I am awake.

Old workflow: phone in bed, unlock, app, orders, scroll. Twice I ended up doomscrolling for 30 minutes before I even stood up.

The agent-browser version pulls the order count for the last 12 hours and the total sales sum, then writes it to a file I display in my terminal statusline.


// shopify-orders.js
await page.goto('https://admin.shopify.com/store/c88aa1-4/orders?created_at_min=' +
  new Date(Date.now() - 43200000).toISOString());
await page.waitForLoadState('networkidle');
const snap = await page.snapshotForAI();
const count = snap.match(/(\d+) orders?\s/)?.[1] || '0';
require('fs').writeFileSync('/tmp/shopify-status.txt', `Overnight: ${count} orders`);

Enter fullscreen mode Exit fullscreen mode

The Shopify admin is heavy but agent-browser handles it well because the script attaches to my real Chrome, so cookies and 2FA are already past. Runtime: 4 seconds.

The bigger win is not the time, it is removing the phone from the morning. That alone was worth writing the script.

I also added a second variant that pulls the inventory level for my 3 most-watched products. If any product drops below a threshold I set, it writes an entry to a restock.txt file I check on Mondays. Same 10-line shape as the order check, different selector. The pattern is so reusable that any new check costs me about 10 minutes to add.

4. Syndication Status Sweep After Every Publish

I cross-post every blog article to Dev.to, Hashnode, and a handful of other platforms. Most of that pipeline is API-driven, but two platforms only have web UIs, and I want to know they actually accepted the post before I move on to the next task.

Old workflow: open Dev.to, search my username, scroll to find the new post, click it, confirm it rendered. Repeat on Hashnode. Repeat on Medium when I still bothered with it. Eight minutes of clicking per article.

The script opens each platform's "my posts" page, checks that the most recent post matches the slug I just published, and prints a status line per platform.


// syndication-check.js
const slug = process.argv[2];
const targets = [
  { name: 'Dev.to', url: 'https://dev.to/raxxostudios' },
  { name: 'Hashnode', url: 'https://raxxostudios.hashnode.dev' }
];
for (const t of targets) {
  await page.goto(t.url);
  const snap = await page.snapshotForAI();
  const ok = snap.toLowerCase().includes(slug.toLowerCase());
  console.log(`${t.name}: ${ok ? 'LIVE' : 'MISSING'}`);
}

Enter fullscreen mode Exit fullscreen mode

I wired this into the post-publish hook in my blog publishing pipeline. The minute the publish step finishes, it kicks off this check and prints to terminal. If a platform reads MISSING, I know to re-fire the syndication for that one only.

Time saved per article: 8 minutes. I publish about 4 articles a week, so 32 minutes recovered.

5. Competitor Pricing Watch, Once an Hour

Three competitor stores sell products in my space. I do not change my prices reactively, but I do want to know if all three move at once. That is usually a signal something upstream changed (supplier, ad costs, a new platform rule).

Old workflow: I tried to remember to check weekly, failed most weeks, then panicked once a month and binge-checked all three.

The script visits each store, captures the price of one anchor product, and appends to a log. A separate one-liner checks if all three moved in the same direction in the last 24 hours and fires a desktop notification.


// pricing-watch.js
const stores = [
  { name: 'rival-a', url: 'https://rival-a.com/products/anchor', sel: 'price' },
  { name: 'rival-b', url: 'https://rival-b.com/products/anchor', sel: 'price' },
  { name: 'rival-c', url: 'https://rival-c.com/products/anchor', sel: 'price' }
];
for (const s of stores) {
  await page.goto(s.url);
  const snap = await page.snapshotForAI();
  const price = snap.match(/€\s?(\d+[.,]?\d*)/)?.[1];
  require('fs').appendFileSync(`pricing-${s.name}.log`, `${Date.now()},${price}\n`);
}

Enter fullscreen mode Exit fullscreen mode

I run it on a cron job hourly with dev-browser --headless ./pricing-watch.js. Headless mode is fine here because none of these stores need auth. The notification fires only when all three logs show a movement in the same direction, which has happened twice in 6 weeks.

Time replaced: maybe an hour per month of manual checks. The real value is the alert, not the time.

The cron line for this one looks like 0 * * * * cd /Users/me/scripts && dev-browser --headless ./pricing-watch.js >> pricing.log 2>&1. Hourly is plenty, since these stores rarely move price more than once a week. I keep the logs raw and parse them with a quick awk one-liner when I want to see the 30-day trend.

Bottom Line

5 scripts, about 6 hours saved per week, 69 EUR per month in SaaS cancelled. The whole setup took an afternoon to write, and most of the scripts share the same 10-line pattern: connect to Chrome, navigate, snapshot, regex, write to file.

If you have any morning routine that involves the same 3 browser tabs every day, you can probably replace it with a 15-line agent-browser script. The hardest part is realising you do not need a paid SaaS or a bot, you just need a script that does what you used to do with your fingers.

For more on the underlying tool, see my earlier piece on AI Agents Just Got a Real Browser. For other ways to chain agents together, jump to The Claude Cowork Plugin Ecosystem. Or browse the full RAXXO Lab for more practical builds.

Top comments (0)