AgentStack
SKILL unreviewed MIT Self-run

Scraperapi Datapipeline

skill-scraperapi-scraperapi-skills-scraperapi-datapipeline · by scraperapi

>

No reviews yet
0 installs
19 views
0.0% view→install

Install

$ agentstack add skill-scraperapi-scraperapi-skills-scraperapi-datapipeline

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Reads credentials/environment and may exfiltrate them.

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Scraperapi Datapipeline? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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:

| Type | Input | |------|-------| | urls | Raw HTML from any URL | | urls_with_js | Same but with JavaScript rendering | | google_search | Search queries | | google_news | Search queries | | google_jobs | Search queries | | google_shopping | Search queries | | google_maps | Search queries | | amazon_product | ASINs | | amazon_search | Search queries | | amazon_offers | ASINs | | walmart_product | Product IDs | | walmart_search | Search queries | | walmart_category | Category IDs | | walmart_reviews | Product IDs | | ebay_product | 12-digit product IDs | | ebay_search | Search queries | | redfin_listing_for_sale | Listing URLs | | redfin_listing_for_rent | Listing URLs | | redfin_listing_search | Search result URLs | | redfin_agent_details | Agent 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

| Field | Required | Description | |-------|----------|-------------| | name | No | Human-readable project name | | projectType | Yes | What to scrape (see table above) | | schedulingEnabled | No | true to enable recurring schedule | | scrapingInterval | Yes (if scheduled) | See scheduling options below | | scheduledAt | No | "now" to run immediately on create | | projectInput | Yes | Input data (see input methods below) | | apiParams | No | Standard ScraperAPI parameters | | webhookOutput | No | Webhook delivery config | | notificationConfig | No | Email 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

| scrapingInterval | Description | |-------------------|-------------| | "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:

| Parameter | Purpose | |-----------|---------| | country_code | Geotarget (e.g. "us", "gb") | | render | JavaScript rendering | | premium | Premium residential proxies | | ultra_premium | Ultra-premium proxies (mutually exclusive with premium) | | device_type | "desktop" or "mobile" | | output_format | "text" or "markdown" for LLM pipelines | | autoparse | Structured JSON extraction for supported sites | | keep_headers | Forward custom headers | | follow_redirect | Control redirect handling | | wait_for_selector | Wait for CSS selector (requires render: true) | | screenshot | Capture screenshot (auto-enables rendering) | | retry_404 | Retry 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

| Limit | Value | |-------|-------| | Max input items | 100,000 per job | | Direct list input | 500 items | | Data retention | 30 days | | Free plan concurrency | 5 connections | | Free plan scheduling | One-time runs only |

Documentation

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.