Recipe · Web scraping

Target audit

Reads the Scrape targets table and marks every row that is still missing a label, a URL, a row selector or a profile of its own. Opens no page and collects nothing — it tells you which sources a harvest would skip or fail on.

On this page

What it does

Flags target rows that are missing a label, a URL, a row selector or a profile of their own. Opens no page.

It runs against one profile, through that profile's own proxy and with its own cookies — so the pages load the way that account's owner would see them. It opens no page at all, which means it can be run against a profile whose session you would rather not disturb.

One profileOpens no pageThe Scrape targets table

The 5 steps

The real tree, read out of the pack the launcher ships. Indentation is nesting: the steps under a loop run once per row, and the ones under a branch run only when the condition above them holds. Every {{…}} is a value filled in at run time — from the row being walked, from a setting on the run, or from the profile itself.

loadRowsLoad every target rowLoad Scrape targets into rows
loopEach targetLoop forEach

Each time

evaluateIs this row workable?Run script
ifOnly rows with a label can be written backIf {{vars.check.label}} exists

Yes

saveRowsMark the rowSave to Scrape targetson failure: continue

Each of those is one of the step types on the automation reference, with the same fields the editor shows and the same fields an agent is handed over the local API.

The tables it uses

These load with the recipe. A dataset is a typed table your workspace owns — the columns are named and typed up front so the steps can address them, and every one of them is yours to rename, extend or fill from a file afterwards.

Scrape targets

readswrites

One row per source: its list page, the selectors that read it, the profile that reads it, and what the last pass found.

label
Label · text
url
URL · url
row_selector
Row selector · text
link_selector
Link selector · text
profile
Profile · profile
status
Status · select · Unchecked | Collected | Nothing matched | Blocked | Needs attention
found
Found · number
checked_at
Checked at · datetime
notes
Notes · longText

Re-running updates the row it already wrote rather than adding a second one. That is what the match column in the save step is for, and it is the difference between a status check and a table that doubles in size every pass.

Loading it

In the launcher, open Automations, choose Load a starter pack, and pick Web scraping. Untick anything you do not want. The tables land first, then the workflows, then a project called Collection that links them together.

What arrives is an ordinary automation row. Open it in the editor, change a step, rename it, delete it — nothing in the app treats it as special afterwards, and loading the pack a second time makes a fresh copy rather than overwriting the one you edited. Tables are the opposite: an existing table of the same name is reused and keeps its rows.