New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Extract structured data from web pages using AI

Extract webpage data

by gooseworks-ai · MIT license · ★ 1,220 on GitHub · updated Sep 21

Extract webpage data cover

Extract structured data from web pages using AI

---
name: extract-webpage-data
description: Extract structured data from web pages using AI
source: orthogonal
---


# Extract Webpage Data

## Setup

Read your credentials from ~/.gooseworks/credentials.json:
```bash
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`

Overview

If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login

Manual install (npx, ZIP)
Claude Codenpx skills add gooseworks-ai/goose-skills --skill extract-webpage-data -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \ | tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/research-tools/capabilities/extract-webpage-data
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/039f95e7186d2e522b58/extract-webpage-data.zip" -OutFile "$env:TEMP\extract-webpage-data.zip"; Expand-Archive "$env:TEMP\extract-webpage-data.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.3 KB
  • skill.meta.json295 B
Read the files here
gooseworks-ai/615c6852 files
SKILL.md
Show the full text188 lines

Extract Webpage Data

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"

Extract structured data from any web page using AI. Turn messy HTML into clean, organized data.

When to Use

  • User wants to extract specific data from a website
  • User asks to scrape information from a page
  • User needs structured data from unstructured content
  • User wants to pull product info, contact details, etc.
  • Converting web content to usable data

How It Works

Uses Olostep, Scrapegraph, or Riveter APIs for AI-powered data extraction.

Usage

Simple Scrape with Olostep
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/products"}}'
AI-Powered Extraction with Scrapegraph
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","body":{"website_url":"https://example.com/team","user_prompt":"Extract all team members with their names, titles, and LinkedIn URLs"}}'
Schema-Based Extraction with Riveter
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","schema":{"name":"string","price":"number","description":"string"}}}'
Get AI Answer from 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":"Find the pricing for Notion Teams plan from their website"}}'
Crawl Multiple 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","body":{"start_url":"https://example.com","max_pages":10}}'

Parameters

Olostep Scrape
  • url_to_scrape (required) - URL to scrape
  • formats - Output formats (markdown, html, text)
Scrapegraph
  • website_url (required) - URL to scrape
  • user_prompt (required) - Natural language description of what to extract
Riveter
  • url (required) - URL to scrape
  • schema - JSON schema defining the data structure to extract
Olostep Answer
  • task (required) - Natural language task/question

Response

Olostep Response

Returns a scrape object:

  • id (string) - Scrape ID (e.g., scrape_z926lxxon3)
  • result.markdown_content (string|null) - Page content as markdown
  • result.html_content (string|null) - Raw HTML (if requested via formats)
  • result.text_content (string|null) - Plain text (if requested)
  • result.markdown_hosted_url (string|null) - S3 URL for large content
  • result.links_on_page (array) - Links found on the page
  • result.screenshot_hosted_url (string|null) - Screenshot URL (if requested)
  • result.page_metadata (object) - status_code of the page
  • credits_consumed (integer) - Credits used for this scrape

Async crawls: POST /v1/crawls returns an id. Poll with GET /v1/crawls/{id} until complete.

Scrapegraph Response

Returns structured extraction result:

  • request_id (string) - Unique request identifier
  • status (string) - completed or pending
  • result (object) - AI-extracted data matching your prompt (dynamic keys)
  • error (string) - Empty on success, error message on failure

Note: For large pages, the POST may return status: "pending". Poll with GET /v1/smartscraper/{request_id} until status is completed.

Riveter Response

Returns scrape result:

  • request_status (string) - success or error
  • message (string) - Human-readable status
  • text (string) - Extracted page text content
  • url (string) - URL that was scraped
  • status_code (integer) - HTTP status of the page
  • run_key (string) - Unique run identifier
  • base_url_for_links (string) - Base URL for resolving relative links
  • riveter_app_link (string) - Link to view run in Riveter dashboard
  • credit_used (integer) - Credits consumed

Examples

User: "Get all the product names and prices from this 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":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://example.com/products","user_prompt":"Extract all products with name, price, and description"}}'

User: "Scrape the team page and get everyone's info"

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","body":{"website_url":"https://example.com/about/team","user_prompt":"Extract team members: name, role, bio, photo URL, LinkedIn"}}'

User: "What are Stripe's API pricing details?"

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":"Find Stripe API pricing breakdown from stripe.com/pricing"}}'

User: "Get all blog post titles and dates from this blog"

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://blog.example.com","schema":{"posts":[{"title":"string","date":"string","url":"string"}]}}}'

Error Handling

  • 504 - Olostep timeout on slow pages — retry or try a simpler URL
  • 400 - Missing required parameters (url_to_scrape for Olostep, website_url + user_prompt for Scrapegraph, url for Riveter)
  • Scrapegraph returns error field in response body — check it even on 200 status
  • Riveter returns request_status: "error" with details in message
  • Some sites block automated scraping — try a different API if one fails

Tips

  • Scrapegraph is best for natural language extraction
  • Riveter is best when you know the exact schema you want
  • Olostep is great for general scraping and AI answers
  • For dynamic sites (JavaScript-heavy), these tools handle rendering
  • Be specific in your prompts for better extraction results
  • Some sites may block automated access
1---
2name: extract-webpage-data
3description: Extract structured data from web pages using AI
4source: orthogonal
5---
6 
7 
8# Extract Webpage Data
9 
10## Setup
11 
12Read your credentials from ~/.gooseworks/credentials.json:
13```bash
14export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
15export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
16```
17 
18If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`
19 
20All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"`
21 
22 
23Extract structured data from any web page using AI. Turn messy HTML into clean, organized data.
24 
25## When to Use
26 
27- User wants to extract specific data from a website
28- User asks to scrape information from a page
29- User needs structured data from unstructured content
30- User wants to pull product info, contact details, etc.
31- Converting web content to usable data
32 
33## How It Works
34 
35Uses Olostep, Scrapegraph, or Riveter APIs for AI-powered data extraction.
36 
37## Usage
38 
39### Simple Scrape with Olostep
40 
41```bash
42curl -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":"olostep","path":"/v1/scrapes","body":{"url_to_scrape":"https://example.com/products"}}'
46```
47 
48### AI-Powered Extraction with Scrapegraph
49 
50```bash
51curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
52 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
53 -H "Content-Type: application/json" \
54 -d '{"api":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://example.com/team","user_prompt":"Extract all team members with their names, titles, and LinkedIn URLs"}}'
55```
56 
57### Schema-Based Extraction with Riveter
58 
59```bash
60curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
61 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
62 -H "Content-Type: application/json" \
63 -d '{"api":"riveter","path":"/v1/scrape","body":{"url":"https://example.com","schema":{"name":"string","price":"number","description":"string"}}}'
64```
65 
66### Get AI Answer from Web
67 
68```bash
69curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
70 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
71 -H "Content-Type: application/json" \
72 -d '{"api":"olostep","path":"/v1/answers","body":{"task":"Find the pricing for Notion Teams plan from their website"}}'
73```
74 
75### Crawl Multiple Pages
76 
77```bash
78curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
79 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
80 -H "Content-Type: application/json" \
81 -d '{"api":"olostep","path":"/v1/crawls","body":{"start_url":"https://example.com","max_pages":10}}'
82```
83 
84## Parameters
85 
86### Olostep Scrape
87- **url_to_scrape** (required) - URL to scrape
88- **formats** - Output formats (markdown, html, text)
89 
90### Scrapegraph
91- **website_url** (required) - URL to scrape
92- **user_prompt** (required) - Natural language description of what to extract
93 
94### Riveter
95- **url** (required) - URL to scrape
96- **schema** - JSON schema defining the data structure to extract
97 
98### Olostep Answer
99- **task** (required) - Natural language task/question
100 
101## Response
102 
103### Olostep Response
104Returns a scrape object:
105- **id** (string) - Scrape ID (e.g., `scrape_z926lxxon3`)
106- **result.markdown_content** (string|null) - Page content as markdown
107- **result.html_content** (string|null) - Raw HTML (if requested via `formats`)
108- **result.text_content** (string|null) - Plain text (if requested)
109- **result.markdown_hosted_url** (string|null) - S3 URL for large content
110- **result.links_on_page** (array) - Links found on the page
111- **result.screenshot_hosted_url** (string|null) - Screenshot URL (if requested)
112- **result.page_metadata** (object) - `status_code` of the page
113- **credits_consumed** (integer) - Credits used for this scrape
114 
115**Async crawls**: POST `/v1/crawls` returns an `id`. Poll with GET `/v1/crawls/{id}` until complete.
116 
117### Scrapegraph Response
118Returns structured extraction result:
119- **request_id** (string) - Unique request identifier
120- **status** (string) - `completed` or `pending`
121- **result** (object) - AI-extracted data matching your prompt (dynamic keys)
122- **error** (string) - Empty on success, error message on failure
123 
124**Note**: For large pages, the POST may return `status: "pending"`. Poll with GET `/v1/smartscraper/{request_id}` until `status` is `completed`.
125 
126### Riveter Response
127Returns scrape result:
128- **request_status** (string) - `success` or `error`
129- **message** (string) - Human-readable status
130- **text** (string) - Extracted page text content
131- **url** (string) - URL that was scraped
132- **status_code** (integer) - HTTP status of the page
133- **run_key** (string) - Unique run identifier
134- **base_url_for_links** (string) - Base URL for resolving relative links
135- **riveter_app_link** (string) - Link to view run in Riveter dashboard
136- **credit_used** (integer) - Credits consumed
137 
138## Examples
139 
140**User:** "Get all the product names and prices from this page"
141```bash
142curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
143 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
144 -H "Content-Type: application/json" \
145 -d '{"api":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://example.com/products","user_prompt":"Extract all products with name, price, and description"}}'
146```
147 
148**User:** "Scrape the team page and get everyone's info"
149```bash
150curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
151 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
152 -H "Content-Type: application/json" \
153 -d '{"api":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://example.com/about/team","user_prompt":"Extract team members: name, role, bio, photo URL, LinkedIn"}}'
154```
155 
156**User:** "What are Stripe's API pricing details?"
157```bash
158curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
159 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
160 -H "Content-Type: application/json" \
161 -d '{"api":"olostep","path":"/v1/answers","body":{"task":"Find Stripe API pricing breakdown from stripe.com/pricing"}}'
162```
163 
164**User:** "Get all blog post titles and dates from this blog"
165```bash
166curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
167 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
168 -H "Content-Type: application/json" \
169 -d '{"api":"riveter","path":"/v1/scrape","body":{"url":"https://blog.example.com","schema":{"posts":[{"title":"string","date":"string","url":"string"}]}}}'
170```
171 
172## Error Handling
173 
174- **504** - Olostep timeout on slow pages — retry or try a simpler URL
175- **400** - Missing required parameters (`url_to_scrape` for Olostep, `website_url` + `user_prompt` for Scrapegraph, `url` for Riveter)
176- Scrapegraph returns `error` field in response body — check it even on 200 status
177- Riveter returns `request_status: "error"` with details in `message`
178- Some sites block automated scraping — try a different API if one fails
179 
180## Tips
181 
182- Scrapegraph is best for natural language extraction
183- Riveter is best when you know the exact schema you want
184- Olostep is great for general scraping and AI answers
185- For dynamic sites (JavaScript-heavy), these tools handle rendering
186- Be specific in your prompts for better extraction results
187- Some sites may block automated access
188 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 1,220
Checked
Source
gooseworks-ai/goose-skills ↗
Creator
gooseworks-ai · 206 listings
View creator

Made with extract-webpage-data

Extract webpage data — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)
Extract webpage data — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)

by gooseworks-ai

Similar skills

See all →
SkillAI crawler access analysisAI Crawler Access Analysis Skillzubair-trabzada/geo-seo-claude · by zubair-trabzadaAI crawler access analysis. Checks robots.txt, meta tags, and HTTP headers to determine which AI crawlers can access the site. Provides a complete access map and recommendations for maximizing AI visibility while maintaining appropriate control.★ 10.8k GitHub starsSkillAutomate browser tasks, scrape websites, fill formsBrowser Automation - POWERFULalirezarezvani/claude-skills · by alirezarezvaniUse when the user asks to automate browser tasks, scrape websites, fill forms, capture screenshots, extract structured data from web pages, or build web automation workflows. NOT for testing — use playwright-pro for that.★ 26.3k GitHub starsSkillBrowser automation skill for controlling Google's NotebookLMNotebookLM — Browser Automationalirezarezvani/claude-skills · by alirezarezvaniBrowser automation skill for controlling Google's NotebookLM. Use when the user wants anything done in NotebookLM (e.g., 'open NotebookLM', 'check my [name] notebook', 'ask my notebook about X', 'add [source] to NotebookLM', 'generate a Video Overview from my notebook', 'use NotebookLM Studio'). Handles reading and querying notebooks, adding sources (URLs, text, files, YouTube links, synthesized content), generating Studio outputs (Audio/Video Overviews, Mind Maps, Reports incl. Briefing Doc/Study Guide/FAQ, Flashcards, Quiz, slide decks, infographics — discover the exact set from the live Studio panel; the UI evolves fast), and creating new notebooks. Requires browser automation environment — fails gracefully when unavailable.★ 26.3k GitHub starsSkill4-tier progressive web scraping that auto-escalates WebFetchBrightdatadanielmiessler/LifeOS · by danielmiessler4-tier progressive web scraping that auto-escalates WebFetch to curl to Interceptor to Bright Data proxy for bot detection and CAPTCHAs, with single-URL and multi-page crawl modes, output as markdown. USE WHEN Bright Data, scrape URL, web scraping, bot detection, crawl site, CAPTCHA, can't access, site blocking, extract page content, scrape whole site, spider domain, convert URL to markdown, getting blocked. NOT FOR simple public content (use WebFetch directly), social platform scraping with named actors (use Apify), or real-Chrome bot bypass with logged-in sessions and zero CDP fingerprint (use Interceptor).★ 19.3k GitHub starsSkillScrape blog posts via RSS feeds with Apify fallbackBlog feed monitorgooseworks-ai/goose-skills · by gooseworks-aiScrape blog posts via RSS feeds (free, no API key) with Apify fallback for JS-heavy sites. Use when you need to monitor competitor blogs, track industry content, or aggregate blog posts by keyword.★ 1.2k GitHub starsSkillBrowser automation - control browser sessions, scrape pagesNotte - Browser Automation APIgooseworks-ai/goose-skills · by gooseworks-aiBrowser automation - control browser sessions, scrape pages, and run AI agents★ 1.2k GitHub stars

More from gooseworks-ai

SkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze ad campaign performance data to identify what'sAd campaign analyzergooseworks-ai/goose-skills · by gooseworks-aiAnalyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.★ 1.2k GitHub starsSkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzergooseworks-ai/goose-skills · by gooseworks-aiFor paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.★ 1.2k GitHub starsSkillAnalyze the message match between your ads and landing pagesAd to landing page auditorgooseworks-ai/goose-skills · by gooseworks-aiAnalyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.★ 1.2k GitHub starsSkillCheck and improve your brand's visibility across AI searchAeogooseworks-ai/goose-skills · by gooseworks-aiCheck and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.★ 1.2k GitHub starsSkillSearch Amazon products - find items, compare pricesAmazon Product Searchgooseworks-ai/goose-skills · by gooseworks-aiSearch Amazon products - find items, compare prices, read reviews★ 1.2k GitHub stars