Task Runner — Run Apify Actors from a Notion or Airtable Board
Under maintenancePricing
from $3.50 / 1,000 job row completeds
Task Runner — Run Apify Actors from a Notion or Airtable Board
Under maintenanceTurn a Notion database, Airtable base or Supabase table into a job queue. Reads pending rows, runs an Apify Actor for each, and writes status, run ID, dataset ID and result count back to the row.
Pricing
from $3.50 / 1,000 job row completeds
Rating
0.0
(0)
Developer
K O
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
Turn the board your team already works in into a job queue.
Add a row: a search term, a URL, a city. Set its status to Pending. This Actor picks it up, runs the Apify Actor you chose, and writes the outcome back to that same row — status, run ID, dataset ID, how many results came back.
Nobody has to open Apify Console to kick off a scrape, and nobody has to go looking for where the results went.
Why a board instead of a schedule
A schedule runs the same thing forever. A board is a queue you can edit: a salesperson adds three cities on Monday, a researcher drops in ten competitor URLs, and each row is picked up on the next pass and reports back where it landed. The work list and the run log end up in one place, visible to people who don't have Apify accounts.
How it works
- Connect your app under Integrations in Apify Console.
- Run in
list-toolsmode to learn the connector's tool names. - Run in
runmode — ideally on a schedule, so the board is drained continuously.
{"board": "<your connector>","mode": "run","readTool": "query_database","readToolArgs": { "database_id": "abc123" },"updateTool": "update_page","idField": "id","idArgName": "page_id","statusField": "Status","pendingValue": "Pending","defaultActorId": "apify/google-maps-scraper","inputMap": { "searchStringsArray": "Query", "maxCrawledPlaces": "Limit" },"datasetIdField": "Dataset","itemCountField": "Results"}
A board row like Query: "roofers in Tucson" · Limit: 50 · Status: Pending becomes a Google Maps run, and comes back as Status: Done · Results: 50 · Dataset: xyz789.
Safety properties
- Rows are claimed before they run. Status flips to
Runningfirst, so a second pass — or a schedule that overlaps itself — never runs the same row twice. - Unusable rows are skipped, not failed. Missing input, missing ID, or no Actor to run means the row is left alone and counted. A queue that marks rows failed for being blank is a queue nobody trusts.
- A write-back failure never kills the queue. If the board rejects an update, it's logged and the remaining tasks still run.
dryRunshows exactly which rows would run, with the exact input each would get, without starting anything.maxTaskscaps how many child runs one pass can start. Each task consumes your Apify compute — keep it modest until you trust the mapping.
Input
| Field | Required | Description |
|---|---|---|
board | yes | MCP connector holding the task list |
mode | run (default) or list-tools | |
readTool / readToolArgs | for run | Tool that reads the board |
updateTool / updateToolExtraArgs | for run | Tool that patches a row |
idField / idArgName | Where the row ID lives, and what the update tool calls it | |
statusField | Field holding row state. Default Status | |
pendingValue | Value meaning "ready". Default Pending, matched case-insensitively | |
runningValue / doneValue / failedValue | Values written as the task progresses | |
defaultActorId | one of | Actor to run for every row |
actorField | one of | Row field letting each row pick its own Actor |
inputMap | Child Actor input key → row field path | |
staticInput | Constant input for every task; row values win | |
runIdField, datasetIdField, itemCountField, errorField | Optional write-back fields | |
maxTasks | Child runs per pass. Default 25 | |
memoryMbytes / timeoutSecs | Resources for each child run | |
dryRun | Plan only, run nothing |
Output
One row per task:
{ "rowId": "page_123", "actorId": "apify/google-maps-scraper", "status": "Done","itemCount": 50, "datasetId": "xyz789", "runId": "run_456", "error": null }
Cost
$5 per 1,000 tasks completed by this Actor.
Note that each task also starts a child Actor run, which is billed separately under whatever that Actor charges plus your own Apify compute. This Actor orchestrates; it doesn't absorb the cost of what it orchestrates. Use dryRun and maxTasks to see the shape of a pass before letting it loose.
FAQ
Does this see my Notion token? No. Apify's MCP proxy holds credentials and attaches them to outbound calls.
Can different rows run different Actors? Yes — set actorField to a column naming the Actor.
What if a child Actor fails? The row gets your failedValue and, if configured, the error text. The rest of the queue continues.
What if two passes overlap? The first claims rows by flipping them to Running, so the second sees nothing pending.
Can an AI agent call this? Yes — it's exposed through the Apify MCP server.