Task Runner — Run Apify Actors from a Notion or Airtable Board avatar

Task Runner — Run Apify Actors from a Notion or Airtable Board

Under maintenance

Pricing

from $3.50 / 1,000 job row completeds

Go to Apify Store
Task Runner — Run Apify Actors from a Notion or Airtable Board

Task Runner — Run Apify Actors from a Notion or Airtable Board

Under maintenance

Turn 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

K O

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

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

  1. Connect your app under Integrations in Apify Console.
  2. Run in list-tools mode to learn the connector's tool names.
  3. Run in run mode — 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 Running first, 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.
  • dryRun shows exactly which rows would run, with the exact input each would get, without starting anything.
  • maxTasks caps how many child runs one pass can start. Each task consumes your Apify compute — keep it modest until you trust the mapping.

Input

FieldRequiredDescription
boardyesMCP connector holding the task list
moderun (default) or list-tools
readTool / readToolArgsfor runTool that reads the board
updateTool / updateToolExtraArgsfor runTool that patches a row
idField / idArgNameWhere the row ID lives, and what the update tool calls it
statusFieldField holding row state. Default Status
pendingValueValue meaning "ready". Default Pending, matched case-insensitively
runningValue / doneValue / failedValueValues written as the task progresses
defaultActorIdone ofActor to run for every row
actorFieldone ofRow field letting each row pick its own Actor
inputMapChild Actor input key → row field path
staticInputConstant input for every task; row values win
runIdField, datasetIdField, itemCountField, errorFieldOptional write-back fields
maxTasksChild runs per pass. Default 25
memoryMbytes / timeoutSecsResources for each child run
dryRunPlan 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.