Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
vm0-ai avatar

Apify

  • 379 installs
  • 76 repo stars
  • Updated August 4, 2026
  • vm0-ai/vm0-skills

apify is a Claude Code skill that runs Apify web scraping Actors through the Apify API so developers who need structured site data can start crawls, poll runs, and troubleshoot APIFY_TOKEN connector failures.

About

apify is a vm0-ai/vm0-skills workflow for the Apify web scraping platform, triggered when users mention scrape website, web crawler, or extract data from a site. The skill starts asynchronous Actor runs by writing /tmp/apify_request.json with fields such as startUrls, maxPagesPerCrawl, and a pageFunction jQuery script, then posts to Apify endpoints like api.apify.com/v2/acts/apify~web-scraper/runs. It includes troubleshooting via zero doctor check-connector --env-name APIFY_TOKEN or direct URL probes when requests fail. Developers reach for apify when agents must harvest listing pages, monitor competitor sites, or feed downstream pipelines without maintaining custom headless browser infrastructure, provided an Apify token and Actor configuration are available in the environment. The skill is triggered by scrape website, web crawler, scraping, or extract data from phrasing and pairs with vm0 zero doctor connector diagnostics for reliable APIFY_TOKEN validation.

  • apify

Apify by the numbers

  • 379 all-time installs (skills.sh)
  • Ranked #1,140 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vm0-ai/vm0-skills --skill apify

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs379
repo stars76
Last updatedAugust 4, 2026
Repositoryvm0-ai/vm0-skills

How do you run Apify web scrapers from agents?

Use apify for development tasks

Who is it for?

Developers automating web data extraction through Apify Actors who want agent-guided request JSON setup and APIFY_TOKEN connector troubleshooting.

Skip if: Developers banned from scraping target sites or needing only static CSV imports without live web crawling infrastructure.

When should I use this skill?

The user asks to scrape a website, run an Apify web-scraper Actor, extract data from URLs, or debug APIFY_TOKEN connector failures.

What you get

Apify Actor run IDs, scraped dataset items, /tmp/apify_request.json payloads, and connector diagnostics from zero doctor checks.

  • Actor run configuration JSON
  • scraped dataset output
  • connector diagnostic results

By the numbers

  • Uses Apify web-scraper Actor endpoint api.apify.com/v2/acts/apify~web-scraper/runs
  • Stores run payloads in /tmp/apify_request.json before async POST requests
  • Validates APIFY_TOKEN via zero doctor check-connector troubleshooting commands

Files

SKILL.mdMarkdownGitHub ↗

Troubleshooting

If requests fail, run zero doctor check-connector --env-name APIFY_TOKEN or zero doctor check-connector --url https://api.apify.com/v2/acts/apify~web-scraper/runs --method POST

How to Use

1. Run an Actor (Async)

Start an Actor run asynchronously:

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://example.com"}],
  "maxPagesPerCrawl": 10,
  "pageFunction": "async function pageFunction(context) { const { request, log, jQuery } = context; const $ = jQuery; const title = $(\"title\").text(); return { url: request.url, title }; }"
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/apify~web-scraper/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json

Response contains `id` (run ID) and `defaultDatasetId` for fetching results.

2. Run Actor Synchronously

Wait for completion and get results directly (max 5 min):

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://news.ycombinator.com"}],
  "maxPagesPerCrawl": 1,
  "pageFunction": "async function pageFunction(context) { const { request, log, jQuery } = context; const $ = jQuery; const title = $(\"title\").text(); return { url: request.url, title }; }"
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/apify~web-scraper/run-sync-get-dataset-items" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json

3. Check Run Status

⚠️ Important: The {runId} below is a placeholder - replace it with the actual run ID from your async run response (found in .data.id). See the complete workflow example below.

Poll the run status:

# Replace {runId} with actual ID like "HG7ML7M8z78YcAPEB"
curl -s "https://api.apify.com/v2/actor-runs/{runId}" --header "Authorization: Bearer $APIFY_TOKEN" | jq -r '.data.status'

Complete workflow example (capture run ID and check status):

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://example.com"}],
  "maxPagesPerCrawl": 10
}

Then run:

# Step 1: Start an async run and capture the run ID
RUN_ID=$(curl -s -X POST "https://api.apify.com/v2/acts/apify~web-scraper/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json | jq -r '.data.id')

# Step 2: Check the run status
curl -s "https://api.apify.com/v2/actor-runs/${RUN_ID}" --header "Authorization: Bearer $APIFY_TOKEN" | jq '.data.status'

Statuses: READY, RUNNING, SUCCEEDED, FAILED, ABORTED, TIMED-OUT

4. Get Dataset Items

⚠️ Important: The {datasetId} below is a placeholder - do not use it literally! You must replace it with the actual dataset ID from your run response (found in .data.defaultDatasetId). See the complete workflow example below for how to capture and use the real ID.

Fetch results from a completed run:

# Replace {datasetId} with actual ID like "WkzbQMuFYuamGv3YF"
curl -s "https://api.apify.com/v2/datasets/{datasetId}/items" --header "Authorization: Bearer $APIFY_TOKEN"

Complete workflow example (run async, wait, and fetch results):

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://example.com"}],
  "maxPagesPerCrawl": 10
}

Then run:

# Step 1: Start async run and capture IDs
RESPONSE=$(curl -s -X POST "https://api.apify.com/v2/acts/apify~web-scraper/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json)

RUN_ID=$(echo "$RESPONSE" | jq -r '.data.id')
DATASET_ID=$(echo "$RESPONSE" | jq -r '.data.defaultDatasetId')

# Step 2: Wait for completion (poll status)
while true; do
  STATUS=$(curl -s "https://api.apify.com/v2/actor-runs/${RUN_ID}" --header "Authorization: Bearer $APIFY_TOKEN" | jq -r '.data.status')
  echo "Status: $STATUS"
  [[ "$STATUS" == "SUCCEEDED" ]] && break
  [[ "$STATUS" == "FAILED" || "$STATUS" == "ABORTED" ]] && exit 1
  sleep 5
done

# Step 3: Fetch the dataset items
curl -s "https://api.apify.com/v2/datasets/${DATASET_ID}/items" --header "Authorization: Bearer $APIFY_TOKEN"

With pagination:

# Replace {datasetId} with actual ID
curl -s "https://api.apify.com/v2/datasets/{datasetId}/items?limit=100&offset=0" --header "Authorization: Bearer $APIFY_TOKEN"

5. Popular Actors

Google Search Scraper

Write to /tmp/apify_request.json:

{
  "queries": "web scraping tools",
  "maxPagesPerQuery": 1,
  "resultsPerPage": 10
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/apify~google-search-scraper/run-sync-get-dataset-items?timeout=120" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json
Website Content Crawler

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://docs.example.com"}],
  "maxCrawlPages": 10,
  "crawlerType": "cheerio"
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/apify~website-content-crawler/run-sync-get-dataset-items?timeout=300" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json
Instagram Scraper

Write to /tmp/apify_request.json:

{
  "directUrls": ["https://www.instagram.com/apaborotnikov/"],
  "resultsType": "posts",
  "resultsLimit": 10
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/apify~instagram-scraper/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json
Amazon Product Scraper

Write to /tmp/apify_request.json:

{
  "categoryOrProductUrls": [{"url": "https://www.amazon.com/dp/B0BSHF7WHW"}],
  "maxItemsPerStartUrl": 1
}

Then run:

curl -s -X POST "https://api.apify.com/v2/acts/junglee~amazon-crawler/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json

6. List Your Runs

Get recent Actor runs:

curl -s "https://api.apify.com/v2/actor-runs?limit=10&desc=true" --header "Authorization: Bearer $APIFY_TOKEN" | jq '.data.items[] | {id, actId, status, startedAt}'

7. Abort a Run

⚠️ Important: The {runId} below is a placeholder - replace it with the actual run ID. See the complete workflow example below.

Stop a running Actor:

# Replace {runId} with actual ID like "HG7ML7M8z78YcAPEB"
curl -s -X POST "https://api.apify.com/v2/actor-runs/{runId}/abort" --header "Authorization: Bearer $APIFY_TOKEN"

Complete workflow example (start a run and abort it):

Write to /tmp/apify_request.json:

{
  "startUrls": [{"url": "https://example.com"}],
  "maxPagesPerCrawl": 100
}

Then run:

# Step 1: Start an async run and capture the run ID
RUN_ID=$(curl -s -X POST "https://api.apify.com/v2/acts/apify~web-scraper/runs" --header "Authorization: Bearer $APIFY_TOKEN" --header "Content-Type: application/json" -d @/tmp/apify_request.json | jq -r '.data.id')

echo "Started run: $RUN_ID"

# Step 2: Abort the run
curl -s -X POST "https://api.apify.com/v2/actor-runs/${RUN_ID}/abort" --header "Authorization: Bearer $APIFY_TOKEN"

8. List Available Actors

Browse public Actors:

curl -s "https://api.apify.com/v2/store?limit=20&category=ECOMMERCE" --header "Authorization: Bearer $APIFY_TOKEN" | jq '.data.items[] | {name, username, title}'

Popular Actors Reference

Actor IDDescription
apify/web-scraperGeneral web scraper
apify/website-content-crawlerCrawl entire websites
apify/google-search-scraperGoogle search results
apify/instagram-scraperInstagram posts/profiles
junglee/amazon-crawlerAmazon products
apify/twitter-scraperTwitter/X posts
apify/youtube-scraperYouTube videos
apify/linkedin-scraperLinkedIn profiles
lukaskrivka/google-mapsGoogle Maps places

Find more at: https://apify.com/store

Run Options

ParameterTypeDescription
timeoutnumberRun timeout in seconds
memorynumberMemory in MB (128, 256, 512, 1024, 2048, 4096)
maxItemsnumberMax items to return (for sync endpoints)
buildstringActor build tag (default: "latest")
waitForFinishnumberWait time in seconds (for async runs)

Response Format

Run object:

{
  "data": {
  "id": "HG7ML7M8z78YcAPEB",
  "actId": "HDSasDasz78YcAPEB",
  "status": "SUCCEEDED",
  "startedAt": "2024-01-01T00:00:00.000Z",
  "finishedAt": "2024-01-01T00:01:00.000Z",
  "defaultDatasetId": "WkzbQMuFYuamGv3YF",
  "defaultKeyValueStoreId": "tbhFDFDh78YcAPEB"
  }
}

Guidelines

1. Sync vs Async: Use run-sync-get-dataset-items for quick tasks (<5 min), async for longer jobs 2. Rate Limits: 250,000 requests/min globally, 400/sec per resource 3. Memory: Higher memory = faster execution but more credits 4. Timeouts: Default varies by Actor; set explicit timeout for sync calls 5. Pagination: Use limit and offset for large datasets 6. Actor Input: Each Actor has different input schema - check Actor's page for details 7. Credits: Check usage at https://console.apify.com/billing

Related skills

How it compares

Use apify for managed Actor-based scraping with token diagnostics; choose raw Playwright skills when you need fully local browser control without Apify cloud runs.

FAQ

How does apify start a scrape run?

apify writes /tmp/apify_request.json with startUrls, maxPagesPerCrawl, and a pageFunction script, then triggers an async POST to api.apify.com/v2/acts/apify~web-scraper/runs using the configured Apify token.

How do you debug apify connector failures?

apify suggests zero doctor check-connector --env-name APIFY_TOKEN or zero doctor check-connector --url https://api.apify.com/v2/acts/apify~web-scraper/runs --method POST when Apify API requests fail.

When should agents load the apify skill?

apify activates when users mention scrape website, web crawler, scraping, or extracting data from a site, guiding Actor configuration instead of ad-hoc curl scripts.

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.