Scrape — General-Purpose Web Scraping & Data Extraction
Scrape websites, extract structured data, and automate browsers.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/research-tools/capabilities/web-scraping#main ~/.claude/skills/web-scrapingFor one project only, change the path to .claude/skills/web-scraping.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text442 lines
Scrape — General-Purpose Web Scraping & Data Extraction
Setup
Read your credentials from ~/.gooseworks/credentials.json:
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
All endpoints use Bearer auth: -H "Authorization: Bearer $GOOSEWORKS_API_KEY"
Scrape websites, extract structured data, and automate browser interactions. Pick the best API for the task — or combine several for comprehensive extraction.
1. Scrapegraph — AI-Powered Scraping with Natural Language
Best for: Extracting data using plain English prompts, converting pages to markdown, crawling with AI extraction, and search-based scraping.
AI-powered extraction (describe what you want in natural language):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
"website_url": "https://example.com/products",
"user_prompt": "Extract all product names, prices, descriptions, and image URLs"
}'
With output schema (enforce structure):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
"website_url": "https://example.com/products",
"user_prompt": "Extract all products",
"output_schema": {
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"},
"description": {"type": "string"}
}
}
}
}
}
}'
Search + scrape (search the web and extract from results):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/searchscraper","body":{"user_prompt":"Find the latest iPhone prices from major retailers"}}'
# Poll for results:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/searchscraper/{request_id}"}'
Convert page to markdown:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/markdownify","body":{"website_url":"https://example.com/article"}}'
Crawl with AI extraction:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/crawl"}'
"url": "https://docs.example.com",
"prompt": "Extract all API endpoints and their descriptions",
"max_pages": 20
}'
# Poll for results:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/crawl/{task_id}"}'
Raw HTML scrape:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/scrape","body":{"website_url":"https://example.com"}}'
Get sitemap:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/sitemap","body":{"website_url":"https://example.com"}}'
Key parameters: stealth (bypass bot protection, +4 credits), total_pages (paginate up to 100), number_of_scrolls (infinite scroll pages), render_heavy_js (React/Vue/Angular SPAs), steps (interaction steps before extraction).
2. Olostep — Scalable Scraping & Batch Jobs
Best for: High-volume scraping, batch processing, site crawling, URL discovery, and AI-powered answers from pages.
Scrape a single page:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/scrapes","body":{"url_to_scrape":"https://example.com/page"}}'
AI-powered answer from the web:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/answers","body":{"task":"What is the pricing for Stripe?"}}'
Discover all URLs on a site:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/maps","body":{"url":"https://example.com","search_query":"pricing"}}'
Crawl a site (async):
# Step 1: Start crawl
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/crawls"}'
"start_url": "https://docs.example.com",
"max_pages": 100,
"include_urls": ["/docs/**"]
}'
# Step 2: Check status
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/crawls/{crawl_id}"}'
# Step 3: Get pages
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/crawls/{crawl_id}/pages"}'
# Step 4: Retrieve content
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/retrieve","body":{"retrieve_id":"RETRIEVE_ID"}}'
Batch scrape (process many URLs at once):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/batches"}'
"items": [
{"url_to_scrape": "https://example.com/page1"},
{"url_to_scrape": "https://example.com/page2"},
{"url_to_scrape": "https://example.com/page3"}
]
}'
# Check status:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/batches/{batch_id}"}'
# Get items:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/batches/{batch_id}/items"}'
Key parameters: formats (markdown/html/text), country (US, CA, IT, IN, GB, JP, etc.), actions (page interactions before scraping), wait_before_scraping, remove_css_selectors, llm_extract.
3. Riveter — Structured Extraction with Defined Schemas
Best for: Extracting data into a consistent, predefined structure. Define input URLs and output fields with prompts.
Simple page scrape:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/scrape","body":{"url":"https://example.com/article"}}'
Structured extraction (define your output schema):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run"}'
"input": {
"urls": ["https://example.com/products"]
},
"output": {
"name": {"prompt": "Product name", "contexts": ["urls"]},
"price": {"prompt": "Product price", "contexts": ["urls"], "format": "number"},
"description": {"prompt": "Product description", "contexts": ["urls"]}
}
}'
# Check status:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run_status","query":{"run_key":"RUN_KEY"}}'
# Get data:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run_data","query":{"run_key":"RUN_KEY"}}'
Multi-URL extraction with tools:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run"}'
"input": {
"company_urls": ["https://stripe.com", "https://vercel.com"]
},
"output": {
"company_name": {"prompt": "Company name", "contexts": ["company_urls"]},
"pricing_url": {"prompt": "URL to pricing page", "contexts": ["company_urls"], "format": "url"},
"pricing_details": {"prompt": "Pricing tiers and costs", "contexts": ["pricing_url"], "tools": ["web_scrape"]}
}
}'
Key parameters: Output format options (number/json/url/text/email/tag/date/boolean), tools (web_search/web_scrape/query_pdf/query_image), max_tool_calls (0-10), run_when (always/any_filled/all_filled).
4. Brand.dev — Brand Assets, Logos & Company Data
Best for: Extracting brand logos, colors, fonts, design systems, screenshots, and AI-powered data extraction from company websites.
Get full brand data:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"stripe.com"}}'
By company name / email / ticker:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-name","query":{"name":"Stripe"}}'
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-email","query":{"email":"[email protected]"}}'
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-ticker","query":{"ticker":"AAPL"}}'
Extract design system / styleguide:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/styleguide","query":{"domain":"linear.app"}}'
Extract fonts:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/fonts","query":{"domain":"vercel.com"}}'
Take website screenshot:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/screenshot","query":{"domain":"github.com","fullScreenshot":"true"}}'
AI-powered data extraction:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/ai/query"}'
"domain": "anthropic.com",
"data_to_extract": [{"name": "products", "description": "What products does this company offer?"}]
}'
Extract products:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"stripe.com"}}'
5. Notte — Browser Automation & Page Interaction
Best for: Scraping pages that require browser interaction, CAPTCHAs, login flows, or complex JavaScript rendering. Also supports autonomous AI agents for multi-step browser tasks.
Quick scrape (no session needed):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/scrape","body":{"url":"https://example.com"}}'
Session-based scraping (for complex interactions):
# Step 1: Start a browser session
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/start","body":{"url":"https://example.com","proxies":true,"solve_captchas":true}}'
# Step 2: Observe available actions
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/{session_id}/page/observe","body":{"instruction":"Find the search box"}}'
# Step 3: Execute actions
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/{session_id}/page/execute","body":{"instruction":"Click the search button"}}'
# Step 4: Scrape the page
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/{session_id}/page/scrape","body":{"only_main_content":true}}'
# Step 5: Stop session
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/{session_id}/stop"}'
AI agent (autonomous multi-step browser task):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/agents/start"}'
"task": "Go to Google, search for AI news, and summarize the top 5 results",
"url": "https://google.com",
"max_steps": 20
}'
# Check status:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/agents/{agent_id}"}'
Take screenshot:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{"full_page":true}}'
Key parameters: proxies (rotate proxies), solve_captchas (auto-solve), headless (default true), browser_type (chromium/chrome/firefox), viewport_width/viewport_height.
Tips
- Simple page scrape: Start with Olostep for raw content or Scrapegraph SmartScraper for AI-extracted data
- Natural language extraction: Scrapegraph is the go-to — describe what you want in English, optionally pass an
output_schema - Structured/schema-based extraction: Riveter lets you define exact fields and formats for consistent output
- Brand assets & logos: Brand.dev for logos, colors, fonts, design systems, and screenshots
- Bot protection: Use Scrapegraph's
stealth: trueor Notte'sproxies: true+solve_captchas: true - JavaScript-heavy SPAs: Use Scrapegraph's
render_heavy_js: trueor Notte browser sessions - Batch/bulk scraping: Olostep batches for processing many URLs at once with constant processing time
- Async crawls: Olostep and Scrapegraph crawls are async — start with POST, poll for results
- Page interactions: Use Scrapegraph
stepsfor simple interactions before extraction, or Notte sessions for complex multi-step flows - Pagination: Scrapegraph's
total_pages(up to 100) handles multi-page extraction automatically - Convert to markdown: Scrapegraph
/v1/markdownifyfor clean markdown from any page - Combine APIs: For maximum data, use Scrapegraph for AI extraction + Riveter for structured validation + Olostep for raw content
Discover More
List all endpoints for any API, or add a path for parameter details:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"scrapegraph API endpoints"}' api show olostep
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"riveter API endpoints"}' api show brand-dev
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"notte API endpoints"}'
Example: `curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/details \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/smartscraper`"}' for full parameter details.
| 1 | |
| 2 | name web-scraping |
| 3 | description Scrape websites, extract structured data, and automate browsers. Use when asked to scrape, extract, crawl, parse, or pull data from web pages or any URL. |
| 4 | source orthogonal |
| 5 | |
| 6 | |
| 7 | |
| 8 | # Scrape — General-Purpose Web Scraping & Data Extraction |
| 9 | |
| 10 | ## Setup |
| 11 | |
| 12 | Read your credentials from ~/.gooseworks/credentials.json: |
| 13 | |
| 14 | export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])") |
| 15 | export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))") |
| 16 | |
| 17 | |
| 18 | If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login` |
| 19 | |
| 20 | All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"` |
| 21 | |
| 22 | |
| 23 | Scrape websites, extract structured data, and automate browser interactions. Pick the best API for the task — or combine several for comprehensive extraction. |
| 24 | |
| 25 | ## 1. Scrapegraph — AI-Powered Scraping with Natural Language |
| 26 | |
| 27 | Best for: Extracting data using plain English prompts, converting pages to markdown, crawling with AI extraction, and search-based scraping. |
| 28 | |
| 29 | **AI-powered extraction** (describe what you want in natural language): |
| 30 | |
| 31 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 32 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 33 | -H "Content-Type: application/json" \ |
| 34 | -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' |
| 35 | "website_url": "https://example.com/products", |
| 36 | "user_prompt": "Extract all product names, prices, descriptions, and image URLs" |
| 37 | }' |
| 38 | |
| 39 | |
| 40 | **With output schema** (enforce structure): |
| 41 | |
| 42 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 43 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 44 | -H "Content-Type: application/json" \ |
| 45 | -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' |
| 46 | "website_url": "https://example.com/products", |
| 47 | "user_prompt": "Extract all products", |
| 48 | "output_schema": { |
| 49 | "properties": { |
| 50 | "products": { |
| 51 | "type": "array", |
| 52 | "items": { |
| 53 | "type": "object", |
| 54 | "properties": { |
| 55 | "name": {"type": "string"}, |
| 56 | "price": {"type": "number"}, |
| 57 | "description": {"type": "string"} |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | } |
| 62 | } |
| 63 | }' |
| 64 | |
| 65 | |
| 66 | **Search + scrape** (search the web and extract from results): |
| 67 | |
| 68 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 69 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 70 | -H "Content-Type: application/json" \ |
| 71 | -d '{"api":"scrapegraph","path":"/v1/searchscraper","body":{"user_prompt":"Find the latest iPhone prices from major retailers"}}' |
| 72 | # Poll for results: |
| 73 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 74 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 75 | -H "Content-Type: application/json" \ |
| 76 | -d '{"api":"scrapegraph","path":"/v1/searchscraper/{request_id}"}' |
| 77 | |
| 78 | |
| 79 | **Convert page to markdown:** |
| 80 | |
| 81 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 82 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 83 | -H "Content-Type: application/json" \ |
| 84 | -d '{"api":"scrapegraph","path":"/v1/markdownify","body":{"website_url":"https://example.com/article"}}' |
| 85 | |
| 86 | |
| 87 | **Crawl with AI extraction:** |
| 88 | |
| 89 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 90 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 91 | -H "Content-Type: application/json" \ |
| 92 | -d '{"api":"scrapegraph","path":"/v1/crawl"}' |
| 93 | "url": "https://docs.example.com", |
| 94 | "prompt": "Extract all API endpoints and their descriptions", |
| 95 | "max_pages": 20 |
| 96 | }' |
| 97 | # Poll for results: |
| 98 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 99 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 100 | -H "Content-Type: application/json" \ |
| 101 | -d '{"api":"scrapegraph","path":"/v1/crawl/{task_id}"}' |
| 102 | |
| 103 | |
| 104 | **Raw HTML scrape:** |
| 105 | |
| 106 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 107 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 108 | -H "Content-Type: application/json" \ |
| 109 | -d '{"api":"scrapegraph","path":"/v1/scrape","body":{"website_url":"https://example.com"}}' |
| 110 | |
| 111 | |
| 112 | **Get sitemap:** |
| 113 | |
| 114 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 115 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 116 | -H "Content-Type: application/json" \ |
| 117 | -d '{"api":"scrapegraph","path":"/v1/sitemap","body":{"website_url":"https://example.com"}}' |
| 118 | |
| 119 | |
| 120 | Key parameters: `stealth` (bypass bot protection, +4 credits), `total_pages` (paginate up to 100), `number_of_scrolls` (infinite scroll pages), `render_heavy_js` (React/Vue/Angular SPAs), `steps` (interaction steps before extraction). |
| 121 | |
| 122 | ## 2. Olostep — Scalable Scraping & Batch Jobs |
| 123 | |
| 124 | Best for: High-volume scraping, batch processing, site crawling, URL discovery, and AI-powered answers from pages. |
| 125 | |
| 126 | **Scrape a single page:** |
| 127 | |
| 128 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 129 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 130 | -H "Content-Type: application/json" \ |
| 131 | -d '{"api":"olostep","path":"/v1/scrapes","body":{"url_to_scrape":"https://example.com/page"}}' |
| 132 | |
| 133 | |
| 134 | **AI-powered answer from the web:** |
| 135 | |
| 136 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 137 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 138 | -H "Content-Type: application/json" \ |
| 139 | -d '{"api":"olostep","path":"/v1/answers","body":{"task":"What is the pricing for Stripe?"}}' |
| 140 | |
| 141 | |
| 142 | **Discover all URLs on a site:** |
| 143 | |
| 144 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 145 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 146 | -H "Content-Type: application/json" \ |
| 147 | -d '{"api":"olostep","path":"/v1/maps","body":{"url":"https://example.com","search_query":"pricing"}}' |
| 148 | |
| 149 | |
| 150 | **Crawl a site** (async): |
| 151 | |
| 152 | # Step 1: Start crawl |
| 153 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 154 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 155 | -H "Content-Type: application/json" \ |
| 156 | -d '{"api":"olostep","path":"/v1/crawls"}' |
| 157 | "start_url": "https://docs.example.com", |
| 158 | "max_pages": 100, |
| 159 | "include_urls": ["/docs/**"] |
| 160 | }' |
| 161 | # Step 2: Check status |
| 162 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 163 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 164 | -H "Content-Type: application/json" \ |
| 165 | -d '{"api":"olostep","path":"/v1/crawls/{crawl_id}"}' |
| 166 | # Step 3: Get pages |
| 167 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 168 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 169 | -H "Content-Type: application/json" \ |
| 170 | -d '{"api":"olostep","path":"/v1/crawls/{crawl_id}/pages"}' |
| 171 | # Step 4: Retrieve content |
| 172 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 173 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 174 | -H "Content-Type: application/json" \ |
| 175 | -d '{"api":"olostep","path":"/v1/retrieve","body":{"retrieve_id":"RETRIEVE_ID"}}' |
| 176 | |
| 177 | |
| 178 | **Batch scrape** (process many URLs at once): |
| 179 | |
| 180 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 181 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 182 | -H "Content-Type: application/json" \ |
| 183 | -d '{"api":"olostep","path":"/v1/batches"}' |
| 184 | "items": [ |
| 185 | {"url_to_scrape": "https://example.com/page1"}, |
| 186 | {"url_to_scrape": "https://example.com/page2"}, |
| 187 | {"url_to_scrape": "https://example.com/page3"} |
| 188 | ] |
| 189 | }' |
| 190 | # Check status: |
| 191 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 192 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 193 | -H "Content-Type: application/json" \ |
| 194 | -d '{"api":"olostep","path":"/v1/batches/{batch_id}"}' |
| 195 | # Get items: |
| 196 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 197 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 198 | -H "Content-Type: application/json" \ |
| 199 | -d '{"api":"olostep","path":"/v1/batches/{batch_id}/items"}' |
| 200 | |
| 201 | |
| 202 | Key parameters: `formats` (markdown/html/text), `country` (US, CA, IT, IN, GB, JP, etc.), `actions` (page interactions before scraping), `wait_before_scraping`, `remove_css_selectors`, `llm_extract`. |
| 203 | |
| 204 | ## 3. Riveter — Structured Extraction with Defined Schemas |
| 205 | |
| 206 | Best for: Extracting data into a consistent, predefined structure. Define input URLs and output fields with prompts. |
| 207 | |
| 208 | **Simple page scrape:** |
| 209 | |
| 210 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 211 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 212 | -H "Content-Type: application/json" \ |
| 213 | -d '{"api":"riveter","path":"/v1/scrape","body":{"url":"https://example.com/article"}}' |
| 214 | |
| 215 | |
| 216 | **Structured extraction** (define your output schema): |
| 217 | |
| 218 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 219 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 220 | -H "Content-Type: application/json" \ |
| 221 | -d '{"api":"riveter","path":"/v1/run"}' |
| 222 | "input": { |
| 223 | "urls": ["https://example.com/products"] |
| 224 | }, |
| 225 | "output": { |
| 226 | "name": {"prompt": "Product name", "contexts": ["urls"]}, |
| 227 | "price": {"prompt": "Product price", "contexts": ["urls"], "format": "number"}, |
| 228 | "description": {"prompt": "Product description", "contexts": ["urls"]} |
| 229 | } |
| 230 | }' |
| 231 | # Check status: |
| 232 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 233 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 234 | -H "Content-Type: application/json" \ |
| 235 | -d '{"api":"riveter","path":"/v1/run_status","query":{"run_key":"RUN_KEY"}}' |
| 236 | # Get data: |
| 237 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 238 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 239 | -H "Content-Type: application/json" \ |
| 240 | -d '{"api":"riveter","path":"/v1/run_data","query":{"run_key":"RUN_KEY"}}' |
| 241 | |
| 242 | |
| 243 | **Multi-URL extraction with tools:** |
| 244 | |
| 245 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 246 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 247 | -H "Content-Type: application/json" \ |
| 248 | -d '{"api":"riveter","path":"/v1/run"}' |
| 249 | "input": { |
| 250 | "company_urls": ["https://stripe.com", "https://vercel.com"] |
| 251 | }, |
| 252 | "output": { |
| 253 | "company_name": {"prompt": "Company name", "contexts": ["company_urls"]}, |
| 254 | "pricing_url": {"prompt": "URL to pricing page", "contexts": ["company_urls"], "format": "url"}, |
| 255 | "pricing_details": {"prompt": "Pricing tiers and costs", "contexts": ["pricing_url"], "tools": ["web_scrape"]} |
| 256 | } |
| 257 | }' |
| 258 | |
| 259 | |
| 260 | Key parameters: Output `format` options (number/json/url/text/email/tag/date/boolean), `tools` (web_search/web_scrape/query_pdf/query_image), `max_tool_calls` (0-10), `run_when` (always/any_filled/all_filled). |
| 261 | |
| 262 | ## 4. Brand.dev — Brand Assets, Logos & Company Data |
| 263 | |
| 264 | Best for: Extracting brand logos, colors, fonts, design systems, screenshots, and AI-powered data extraction from company websites. |
| 265 | |
| 266 | **Get full brand data:** |
| 267 | |
| 268 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 269 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 270 | -H "Content-Type: application/json" \ |
| 271 | -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"stripe.com"}}' |
| 272 | |
| 273 | |
| 274 | **By company name / email / ticker:** |
| 275 | |
| 276 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 277 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 278 | -H "Content-Type: application/json" \ |
| 279 | -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-name","query":{"name":"Stripe"}}' |
| 280 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 281 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 282 | -H "Content-Type: application/json" \ |
| 283 | -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-email","query":{"email":"[email protected]"}}' |
| 284 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 285 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 286 | -H "Content-Type: application/json" \ |
| 287 | -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-ticker","query":{"ticker":"AAPL"}}' |
| 288 | |
| 289 | |
| 290 | **Extract design system / styleguide:** |
| 291 | |
| 292 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 293 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 294 | -H "Content-Type: application/json" \ |
| 295 | -d '{"api":"brand-dev","path":"/v1/brand/styleguide","query":{"domain":"linear.app"}}' |
| 296 | |
| 297 | |
| 298 | **Extract fonts:** |
| 299 | |
| 300 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 301 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 302 | -H "Content-Type: application/json" \ |
| 303 | -d '{"api":"brand-dev","path":"/v1/brand/fonts","query":{"domain":"vercel.com"}}' |
| 304 | |
| 305 | |
| 306 | **Take website screenshot:** |
| 307 | |
| 308 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 309 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 310 | -H "Content-Type: application/json" \ |
| 311 | -d '{"api":"brand-dev","path":"/v1/brand/screenshot","query":{"domain":"github.com","fullScreenshot":"true"}}' |
| 312 | |
| 313 | |
| 314 | **AI-powered data extraction:** |
| 315 | |
| 316 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 317 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 318 | -H "Content-Type: application/json" \ |
| 319 | -d '{"api":"brand-dev","path":"/v1/brand/ai/query"}' |
| 320 | "domain": "anthropic.com", |
| 321 | "data_to_extract": [{"name": "products", "description": "What products does this company offer?"}] |
| 322 | }' |
| 323 | |
| 324 | |
| 325 | **Extract products:** |
| 326 | |
| 327 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 328 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 329 | -H "Content-Type: application/json" \ |
| 330 | -d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"stripe.com"}}' |
| 331 | |
| 332 | |
| 333 | ## 5. Notte — Browser Automation & Page Interaction |
| 334 | |
| 335 | Best for: Scraping pages that require browser interaction, CAPTCHAs, login flows, or complex JavaScript rendering. Also supports autonomous AI agents for multi-step browser tasks. |
| 336 | |
| 337 | **Quick scrape** (no session needed): |
| 338 | |
| 339 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 340 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 341 | -H "Content-Type: application/json" \ |
| 342 | -d '{"api":"notte","path":"/scrape","body":{"url":"https://example.com"}}' |
| 343 | |
| 344 | |
| 345 | **Session-based scraping** (for complex interactions): |
| 346 | |
| 347 | # Step 1: Start a browser session |
| 348 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 349 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 350 | -H "Content-Type: application/json" \ |
| 351 | -d '{"api":"notte","path":"/sessions/start","body":{"url":"https://example.com","proxies":true,"solve_captchas":true}}' |
| 352 | |
| 353 | # Step 2: Observe available actions |
| 354 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 355 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 356 | -H "Content-Type: application/json" \ |
| 357 | -d '{"api":"notte","path":"/sessions/{session_id}/page/observe","body":{"instruction":"Find the search box"}}' |
| 358 | |
| 359 | # Step 3: Execute actions |
| 360 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 361 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 362 | -H "Content-Type: application/json" \ |
| 363 | -d '{"api":"notte","path":"/sessions/{session_id}/page/execute","body":{"instruction":"Click the search button"}}' |
| 364 | |
| 365 | # Step 4: Scrape the page |
| 366 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 367 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 368 | -H "Content-Type: application/json" \ |
| 369 | -d '{"api":"notte","path":"/sessions/{session_id}/page/scrape","body":{"only_main_content":true}}' |
| 370 | |
| 371 | # Step 5: Stop session |
| 372 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 373 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 374 | -H "Content-Type: application/json" \ |
| 375 | -d '{"api":"notte","path":"/sessions/{session_id}/stop"}' |
| 376 | |
| 377 | |
| 378 | **AI agent** (autonomous multi-step browser task): |
| 379 | |
| 380 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 381 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 382 | -H "Content-Type: application/json" \ |
| 383 | -d '{"api":"notte","path":"/agents/start"}' |
| 384 | "task": "Go to Google, search for AI news, and summarize the top 5 results", |
| 385 | "url": "https://google.com", |
| 386 | "max_steps": 20 |
| 387 | }' |
| 388 | # Check status: |
| 389 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 390 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 391 | -H "Content-Type: application/json" \ |
| 392 | -d '{"api":"notte","path":"/agents/{agent_id}"}' |
| 393 | |
| 394 | |
| 395 | **Take screenshot:** |
| 396 | |
| 397 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 398 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 399 | -H "Content-Type: application/json" \ |
| 400 | -d '{"api":"notte","path":"/sessions/{session_id}/page/screenshot","body":{"full_page":true}}' |
| 401 | |
| 402 | |
| 403 | Key parameters: `proxies` (rotate proxies), `solve_captchas` (auto-solve), `headless` (default true), `browser_type` (chromium/chrome/firefox), `viewport_width`/`viewport_height`. |
| 404 | |
| 405 | ## Tips |
| 406 | |
| 407 | **Simple page scrape**: Start with Olostep for raw content or Scrapegraph SmartScraper for AI-extracted data |
| 408 | **Natural language extraction**: Scrapegraph is the go-to — describe what you want in English, optionally pass an `output_schema` |
| 409 | **Structured/schema-based extraction**: Riveter lets you define exact fields and formats for consistent output |
| 410 | **Brand assets & logos**: Brand.dev for logos, colors, fonts, design systems, and screenshots |
| 411 | **Bot protection**: Use Scrapegraph's `stealth: true` or Notte's `proxies: true` + `solve_captchas: true` |
| 412 | **JavaScript-heavy SPAs**: Use Scrapegraph's `render_heavy_js: true` or Notte browser sessions |
| 413 | **Batch/bulk scraping**: Olostep batches for processing many URLs at once with constant processing time |
| 414 | **Async crawls**: Olostep and Scrapegraph crawls are async — start with POST, poll for results |
| 415 | **Page interactions**: Use Scrapegraph `steps` for simple interactions before extraction, or Notte sessions for complex multi-step flows |
| 416 | **Pagination**: Scrapegraph's `total_pages` (up to 100) handles multi-page extraction automatically |
| 417 | **Convert to markdown**: Scrapegraph `/v1/markdownify` for clean markdown from any page |
| 418 | **Combine APIs**: For maximum data, use Scrapegraph for AI extraction + Riveter for structured validation + Olostep for raw content |
| 419 | |
| 420 | ## Discover More |
| 421 | |
| 422 | List all endpoints for any API, or add a path for parameter details: |
| 423 | |
| 424 | |
| 425 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \ |
| 426 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 427 | -H "Content-Type: application/json" \ |
| 428 | -d '{"prompt":"scrapegraph API endpoints"}' api show olostep |
| 429 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \ |
| 430 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 431 | -H "Content-Type: application/json" \ |
| 432 | -d '{"prompt":"riveter API endpoints"}' api show brand-dev |
| 433 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \ |
| 434 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 435 | -H "Content-Type: application/json" \ |
| 436 | -d '{"prompt":"notte API endpoints"}' |
| 437 | |
| 438 | Example: `curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/details \ |
| 439 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 440 | -H "Content-Type: application/json" \ |
| 441 | -d '{"api":"scrapegraph","path":"/v1/smartscraper`"}' for full parameter details. |
| 442 |