mcpField
S
scraperapi-datapipeline

scraperapi-datapipeline

github.com/scraperapiData & databases10106 installsUpdated 12w ago
Repository

About scraperapi-datapipeline

ScraperAPI DataPipeline is a managed scraping service for teams that need recurring or large-scale data collection without operating proxies, retries, or infrastructure. Projects can run on schedules and deliver results by webhook or make them available in the dashboard.

Key features

  1. 01Configure projects for supported scraping types
  2. 02Schedule recurring or one-time runs
  3. 03Provide inputs through lists, CSV files, or webhooks
  4. 04Deliver results to a webhook or dashboard
  5. 05Configure email notifications for job completion

Use cases

  1. 01Collect data on a recurring schedule
  2. 02Process a large input list in a managed job
  3. 03Send completed results automatically to an application
  4. 04Fetch dynamic input lists through a webhook

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/scraperapi/scraperapi-skills --skill scraperapi-datapipeline

After installing, type/scraperapi-datapipelinein Claude Code to confirm it loaded.

Details

From the project README

ScraperAPI DataPipeline

DataPipeline is a managed scraping product. You define a project (what to scrape, how often, where to send results), and ScraperAPI runs it on your schedule without you managing proxies, retries, or infrastructure.

When NOT to use DataPipeline

  • One-off scrapes of a known URL list → use the Async API — faster, cheaper, no project setup.
  • Exploring a site without known URLs → use the Crawler.
  • Need results in real-time within your code → Async API is programmable; DataPipeline is scheduled.
  • Free plan, need recurring execution → recurring schedules require a paid plan.

Use DataPipeline when: scraping runs on a fixed schedule, the input list is large (up to 100,000 items), results should flow to a webhook automatically, or you want email notifications on job completion.

Base URL and Auth

Base URL: https://datapipeline.scraperapi.com/api
Auth:     ?api_key=YOUR_KEY  (query parameter on every request)

Project Types

Set projectType in the create request to choose what to scrape:

TypeInput
urlsRaw HTML from any URL
urls_with_jsSame but with JavaScript rendering
google_searchSearch queries
google_newsSearch queries
google_jobsSearch queries
google_shoppingSearch queries
google_mapsSearch queries
amazon_productASINs
amazon_searchSearch queries
amazon_offersASINs
walmart_productProduct IDs
walmart_searchSearch queries
walmart_categoryCategory IDs
walmart_reviewsProduct IDs
ebay_product12-digit product IDs
ebay_searchSearch queries
redfin_listing_for_saleListing URLs
redfin_listing_for_rentListing URLs
redfin_listing_searchSearch result URLs
redfin_agent_detailsAgent profile URLs

Creating a Project

import os, requests

API_KEY = os.environ["SCRAPERAPI_API_KEY"]
BASE    = "https://datapipeline.scraperapi.com/api"

project = requests.post(
    f"{BASE}/projects",
    params={"api_key": API_KEY},
    json={
        "name":               "Weekly Amazon price monitor",
        "projectType":        "amazon_product",
        "schedulingEnabled":  True,
        "scrapingInterval":   "weekly",
        "scheduledAt":        "now",
        "projectInput": {
            "type": "list",
            "list": ["B09V3KXJPB", "B08N5WRWNW"]   # ASINs
        },
        "apiParams": {
            "country_code": "us"
        },
        "webhookOutput": {
            "url":             "https://yourapp.com/pipeline-results",
            "webhookEncoding": "multipart_form_data_encoding"
        },
        "notificationConfig": {
            "notifyOnSuccess": "with_every_run",
            "notifyOnFailure": "with_every_run"
        }
    }
).json()

print(f"Project created: id={project['id']}")
Create request fields
FieldRequiredDescription
nameNoHuman-readable project name
projectTypeYesWhat to scrape (see table above)
schedulingEnabledNotrue to enable recurring schedule
scrapingIntervalYes (if scheduled)See scheduling options below
scheduledAtNo"now" to run immediately on create
projectInputYesInput data (see input methods below)
apiParamsNoStandard ScraperAPI parameters
webhookOutputNoWebhook delivery config
notificationConfigNoEmail notification settings

Input Methods

Direct list (up to 500 items)
{
  "projectInput": {
    "type": "list",
    "list": ["query one", "query two", "B09V3KXJPB"]
  }
}
CSV file (up to 100,000 items)

Upload a CSV with one URL/query/ASIN per line — no header rows, no commas. Do this through the dashboard when creating a project; the API accepts list inputs only.

Webhook input (dynamic polling)
{
  "projectInput": {
    "type": "webhook",
    "webhookUrl": "https://yourapp.com/input-items"
  }
}

ScraperAPI polls your webhook URL for the item list when the job starts. One item per line; no commas. Useful for dynamically generated lists (e.g., new ASINs added since the last run).

Scheduling Options

scrapingIntervalDescription
"once"Run a single job immediately
"hourly"Every hour
"daily"Once per day
"weekly"Once per week
"monthly"Once per month
"cron"Custom cron expression (use cron field instead of interval)

Recurring schedules (hourly, daily, weekly, monthly, cron) require a paid plan.

Set "scheduledAt": "now" to trigger the first run immediately when the project is created.

Output / Delivery

Webhook delivery

Results are POSTed to your webhook URL as they complete. The webhookEncoding field controls the format:

{
  "webhookOutput": {
    "url":             "https://yourapp.com/results",
    "webhookEncoding": "multipart_form_data_encoding"
  }
}
Dashboard download

Omit webhookOutput and results are saved for download in the DataPipeline dashboard. Results are retained for 30 days then automatically deleted.

Output formats by project type:

  • urls / urls_with_js → HTML wrapped in JSONL
  • Structured types (Amazon, Google, Walmart, eBay, Redfin) → JSON or CSV

Managing Projects

# List all projects
projects = requests.get(f"{BASE}/projects", params={"api_key": API_KEY}).json()

# Get a single project
project = requests.get(f"{BASE}/projects/525", params={"api_key": API_KEY}).json()

# Update (partial update — only include fields to change)
requests.patch(
    f"{BASE}/projects/525",
    params={"api_key": API_KEY},
    json={
        "scrapingInterval": "daily",
        "apiParams":        {"premium": True},
        "notificationConfig": {"notifyOnSuccess": "never"}
    }
)

# Delete / archive (irreversible without support)
requests.delete(f"{BASE}/projects/525", params={"api_key": API_KEY})

Updatable fields: scrapingInterval, scheduledAt, outputFormat, apiParams, notificationConfig.

Managing Jobs

# List jobs for a project
jobs = requests.get(
    f"{BASE}/projects/525/jobs",
    params={"api_key": API_KEY}
).json()

# Cancel a running job
requests.delete(
    f"{BASE}/projects/525/jobs/{job_id}",
    params={"api_key": API_KEY}
)
# Running requests within the job finish first; final status becomes "Cancelled"

A new job can only start if no other job for that project is currently running.

Notification Config

{
  "notificationConfig": {
    "notifyOnSuccess": "with_every_run",
    "notifyOnFailure": "with_every_run"
  }
}

Options for both fields: "never", "with_every_run", "daily", "weekly".

apiParams Reference

All standard ScraperAPI parameters are supported inside apiParams:

ParameterPurpose
country_codeGeotarget (e.g. "us", "gb")
renderJavaScript rendering
premiumPremium residential proxies
ultra_premiumUltra-premium proxies (mutually exclusive with premium)
device_type"desktop" or "mobile"
output_format"text" or "markdown" for LLM pipelines
autoparseStructured JSON extraction for supported sites
keep_headersForward custom headers
follow_redirectControl redirect handling
wait_for_selectorWait for CSS selector (requires render: true)
screenshotCapture screenshot (auto-enables rendering)
retry_404Retry 404 responses

Credit Costs

DataPipeline uses the same underlying credit rates as the Standard API. Cost is the sum of all requests in a job run. Preview the estimated cost before launching a project from the dashboard.

Only successful 200 and 404 responses are charged; failed requests are not.

Limits

LimitValue
Max input items100,000 per job
Direct list input500 items
Data retention30 days
Free plan concurrency5 connections
Free plan schedulingOne-time runs only

Documentation

Comments

Markdown supported