Scrapingbee CLI
ScrapingBee/scrapingbee-cli
Fetch and read any web page, search the web, crawl a site, or pull structured data out of pages.
Web data extraction and discovery using the Bright Data JavaScript/TypeScript SDK (@brightdata/sdk).
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install brightdata/skills brightdata-sdk-js --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/js-sdk-best-practices .claude/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .claude/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practicesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install brightdata/skills brightdata-sdk-js --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/js-sdk-best-practices .agents/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .agents/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install brightdata/skills brightdata-sdk-js --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/js-sdk-best-practices .cursor/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .cursor/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/brightdata/skills.git --path skills/js-sdk-best-practices--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install brightdata/skills brightdata-sdk-js --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/js-sdk-best-practices .gemini/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .gemini/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install brightdata/skills brightdata-sdk-jsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/js-sdk-best-practices .github/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .github/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add brightdata/skills --skill brightdata-sdk-js -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install brightdata/skills brightdata-sdk-js --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/brightdata/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/js-sdk-best-practices .opencode/skills/brightdata-sdk-js && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "brightdata-sdk-js" agent skill from https://github.com/brightdata/skills/tree/main/skills/js-sdk-best-practices into .opencode/skills/brightdata-sdk-js/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "brightdata-sdk-js", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
brightdata-sdk-jsWeb data extraction and discovery using the Bright Data JavaScript/TypeScript SDK (@brightdata/sdk).
Brightdata SDK JS is an agent skill from brightdata/skills. Web data extraction and discovery using the Bright Data JavaScript/TypeScript SDK (@brightdata/sdk). Use when the user is working in Node.js/TypeScript and asks to "scrape", "get data from", "extract", "search for", or "find" information from websites. Also use when the user mentions specific platforms like Amazon, LinkedIn, Instagram, Facebook, TikTok, YouTube, Reddit, Pinterest, ChatGPT, Perplexity, or DigiKey, or asks for "bulk data", "historical data", or "dataset" from JS. Covers scraping, SERP search, AI…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/advanced.md`, `references/datasets-overview.md` and `references/scrapers.md`).
It sits in Productivity & Automation, covering Web scraping and Web search. It works with Bright Data, Python, JavaScript and TypeScript. The licence is MIT.
Read from SKILL.md and the folder at commit 81f51af. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
amazon.cominstagram.comAlso links to:
brightdata.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
BRIGHTDATA_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Brightdata SDK JS loads about 3k tokens when it runs, and up to ~8.1k if it reads all its reference files. Until then it costs about 168 tokens; SKILL.md has 851 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from brightdata/skills at commit 81f51af, republished under its MIT licence (© brightdata). 851 words, ~2,984 tokens.
.claude/skills/brightdata-sdk-js/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Access web data through a unified Node.js/TypeScript SDK (@brightdata/sdk). One
client, several services: web unlocking (scrapeUrl), platform scraping
(scrape.<platform>), SERP search (search.google/bing/yandex), AI discovery
(discover), datasets, browser automation, and Scraper Studio.
Requires Node.js ≥ 20. Ships ESM + CommonJS with full TypeScript types. The
client is exported as bdclient (lowercase — not a typo).
npm install @brightdata/sdk # or: pnpm add / yarn addThe client reads the BRIGHTDATA_API_TOKEN env var, or you pass { apiKey }.
Get a token at https://brightdata.com/cp/setting/users.
// ESM (package.json "type": "module", or .mjs)
import { bdclient } from '@brightdata/sdk';
// CommonJS (.cjs / "type": "commonjs")
const { bdclient } = require('@brightdata/sdk');
const client = new bdclient(); // reads BRIGHTDATA_API_TOKEN
// const client = new bdclient({ apiKey: '...' });
try {
const html = await client.scrapeUrl('https://example.com');
} finally {
await client.close(); // always close (or `await using`)
}await using client = new bdclient() (TS 5.2+ / Node ≥20) auto-closes at scope end.
Pick the service BEFORE reaching for a specific method. Most routing mistakes come from skipping this step and pattern-matching on keywords.
Have a URL?
├── On a supported platform (Amazon, LinkedIn, Facebook, Instagram, YouTube,
│ TikTok, Reddit, Pinterest, ChatGPT, Perplexity, DigiKey)?
│ → Platform scraping: client.scrape.<platform>.<method>(urls, opts?)
│
├── Generic page (no dedicated platform scraper)?
│ → Web unlocker: client.scrapeUrl(url, { dataFormat: 'markdown' })
│
└── Need login / JS / click-scroll-fill / CAPTCHA / multi-step nav?
→ Browser API: client.browser.getConnectUrl() (connect via Playwright)
No URL?
├── Want entities matching natural-language criteria
│ ("find AI startups in Berlin", "competitors of Acme")?
│ → Discover: client.discover(query, { intent })
│
├── Want web pages / search-result links ("search Google for X")?
│ → SERP: client.search.google(query) [or .bing / .yandex]
│
├── Want to search WITHIN a platform ("Amazon products by keyword",
│ "LinkedIn jobs", "Instagram reels by profile")?
│ → Platform discovery: client.scrape.<platform>.discover*(filters)
│ or amazon.productSearch(...) (NOTE: client.search is SERP-only here)
│
└── Want bulk/historical data at scale?
→ Datasets: client.datasets.<name>.query(filter) → .download(snapshotId)Edge cases:
client.scrapeUrl() (web unlocker).If you know the Python SDK (brightdata-sdk), the JS surface differs — do not
port names blindly:
| Concept | Python | JavaScript |
|---|---|---|
| Client | SyncBrightDataClient / BrightDataClient | bdclient (single, all async) |
| Web unlocker | client.scrape_url(url=...) | client.scrapeUrl(url, opts) |
| Platform search | client.search.amazon.products(...) | none — use scrape.amazon.productSearch / discover* |
client.search | SERP and platform search | SERP only (google/bing/yandex) |
| Batch | *_trigger methods + job.wait() | pass a string[] to one call, or *Trigger + job.wait() |
| Naming | snake_case | camelCase |
| Datasets | client.datasets.amazon_products | client.datasets.amazonProducts |
Before claiming a platform method exists/doesn't exist, consult
references/scrapers.md — it lists every platform's verified methods. The SDK
ships TypeScript types, so in a typed project you can also let the compiler/editor
confirm a method exists.
Each platform exposes up to three method styles (see references/scrapers.md):
collect<Thing>(input, opts?) — returns the rows directly (object[]).<thing>(input, opts?) — orchestrated (trigger → poll → download); returns { data, status, rowCount }. Default to this.discover<Thing>By<X>(filters, opts?) — find items by keyword/category/URL filter instead of by direct URL.Likely hallucinations (do NOT write these — verify in references/scrapers.md):
| Wrong | Right |
|---|---|
client.search.amazon.products(...) | client.scrape.amazon.productSearch(...) (no platform search router in JS) |
client.scrape.linkedin.people(...) | client.scrape.linkedin.profiles(urls) |
client.scrape.chatgpt... | client.scrape.chatGPT... (camelCase G+T) |
client.datasets.amazon_products | client.datasets.amazonProducts |
BrightDataClient / new BdClient() | bdclient (all lowercase) |
| Method | What it does |
|---|---|
client.scrapeUrl(url | url[], opts?) | Web unlocker — any URL → html / markdown / json / screenshot. Pass an array for parallel batch. |
client.search.google(q | q[], opts?) | SERP results (also .bing, .yandex). Array = batch. |
client.discover(query, { intent }) | AI-ranked entity/page discovery. |
client.discoverTrigger(query, opts?) | Non-blocking discover → Job with .wait() / .fetch(). |
client.datasets.list() | List all available datasets at runtime. |
client.scraperStudio.run(collectorId, { input }) | Run a custom Scraper Studio collector. |
client.browser.getConnectUrl({ country }) | CDP WebSocket URL for Playwright/Puppeteer/Selenium. |
client.listZones() | List active Bright Data zones. |
client.saveResults(data, { filename, format }) | Write results to a file. |
client.close() | Close HTTP connections. Always call when done. |
await client.close() (or await using). The client holds a keep-alive transport; leaking it hangs the process.client.search is SERP-only (google/bing/yandex). To search within a platform, use that platform's discover* / productSearch scraper methods — there is no client.search.amazon.chatGPT is camelCase on client.scrape — client.scrape.chatGPT.search(...), not .chatgpt.scrapeUrl([...urls]) and search.google([...queries]) run in parallel internally. For platform scrapers with many inputs, prefer the orchestrated method with an array, or the *Trigger + job.wait() pattern (see references/advanced.md). Don't wrap blocking calls in Promise.all of single-item calls — you'll fight the rate limiter.products/profiles/etc. trigger a job and poll until ready (often 2–10 min). Don't set tiny pollTimeouts; tune via { pollInterval, pollTimeout }. Defaults are calibrated.scrapeUrl. query() returns a snapshotId; download() blocks until the snapshot is ready.client.scrapeUrl().timeout / rateLimit on the constructor instead.All errors extend BRDError. Import the specific classes to branch:
import { bdclient, ValidationError, AuthenticationError, BRDError } from '@brightdata/sdk';
try {
const data = await client.scrape.amazon.products(['https://www.amazon.com/dp/B0D77BX8Y4']);
} catch (err) {
if (err instanceof AuthenticationError) { /* bad/expired token */ }
else if (err instanceof ValidationError) { /* bad input */ }
else if (err instanceof BRDError) { /* any SDK error */ }
else throw err;
}Classes: BRDError (base), ValidationError, AuthenticationError, ZoneError,
NetworkError, NetworkTimeoutError, TimeoutError, APIError,
DataNotReadyError, FSError.
const md = await client.scrapeUrl('https://example.com/article', { dataFormat: 'markdown' });const res = await client.scrape.amazon.products(['https://www.amazon.com/dp/B0D77BX8Y4']);
console.log(res.status, res.rowCount, res.data);const results = await client.search.google(['best running shoes', 'best trail shoes'], { country: 'us' });const startups = await client.discover('AI startups in Berlin', {
intent: 'early-stage machine-learning companies',
numResults: 10,
});const ds = client.datasets;
const snapshotId = await ds.instagramProfiles.query({ url: 'https://www.instagram.com/natgeo/' }, { records_limit: 50 });
// download() blocks until the snapshot is ready
const rows = await ds.instagramProfiles.download(snapshotId);AuthenticationError / 401 — token missing or invalid. Check BRIGHTDATA_API_TOKEN or the apiKey option.client.scrapeUrl() (web unlocker).timeout (constructor, 1000–300000 ms) or the orchestrated pollTimeout; do not lower it.client.datasets.list(); dataset names are camelCase (amazonProducts, linkedinProfiles).await client.close().references/advanced.md for zone/SSL options.{ rateLimit, ratePeriod } on the constructor, or batch via arrays / the trigger pattern instead of Promise.all.references/scrapers.md — when the user names Amazon, LinkedIn, Facebook, Instagram, YouTube, TikTok, Reddit, Pinterest, ChatGPT, Perplexity, DigiKey — verified per-platform method tables (collect / orchestrated / discover) and the scrapeUrl web-unlocker options.references/search.md — SERP engines (search.google/bing/yandex) and the Discover API (discover / discoverTrigger), with all options.references/datasets-overview.md — dataset names, the query → getStatus → download lifecycle, and filters.references/advanced.md — constructor options & env vars, batch/trigger orchestration, Browser API (Playwright/Puppeteer), Scraper Studio, error classes, and zones/SSL.© brightdata, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/js-sdk-best-practices of brightdata/skills.
Open the folder on GitHubat commit 81f51af
Brightdata SDK JS next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Brightdata SDK JS this skillbrightdata/skills | 264 | — | ~3k | Automated safety check: Pass | MIT | |
| Scrapingbee CLIScrapingBee/scrapingbee-cli | 108 | — | ~3.2k | Automated safety check: Notes | MIT | |
| Skyvern Browser AutomationSkyvern-AI/skyvern | 23k | — | ~1.9k | Automated safety check: Pass | AGPL-3.0 | |
| Tavily Search API Integrationandrewyng/context-hub | 14k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Gemini Interactions APIAyuilos/Miffan | 192 | — | ~4.6k | Automated safety check: Pass | AGPL-3.0 | |
| Agent Readiness Auditindranilbanerjee/digital-marketing-pro | 855 | 1 repos | ~3.9k | Automated safety check: Pass | MIT |
ScrapingBee/scrapingbee-cli
Fetch and read any web page, search the web, crawl a site, or pull structured data out of pages.
Skyvern-AI/skyvern
Automates websites with Skyvern's AI browser agent to fill forms, extract data, download files, log in and run multi-step workflows through SDKs, REST, MCP or a CLI.
andrewyng/context-hub
Guides building Tavily integrations for web search, URL extraction, site crawling and AI-assisted research in Python or JavaScript agent and RAG projects.
Ayuilos/Miffan
A skill your agent uses when writing code that calls the Gemini API for text generation, multi-turn chat, multimodal understanding, image generation, video generation, streaming responses…
indranilbanerjee/digital-marketing-pro
Audit whether AI agents and AI crawlers can actually use a site — robots.txt rules per AI crawler token (OpenAI, Anthropic and Perplexity bots, Google-Extended, Applebot-Extended)…
trailofbits/skills-curated
Perform language and framework specific security best-practice reviews and suggest improvements.
brightdata/skills
Replicate the visual style of any website and apply it to your existing codebase.
brightdata/skills
Generate working code that routes HTTP requests through Bright Data proxy networks (Datacenter, ISP, Residential, Mobile) and help users decide which network and IP pool type to use (shared pool…
brightdata/skills
Bright Data MCP handles ALL web data operations. An agent skill from brightdata/skills.
brightdata/skills
Produce a deep, multi-source, cited research brief on a topic from live web data using Bright Data's Discover API (intent-ranked web search + parsed page content).
brightdata/skills
Extract structured data from 40+ supported platforms (Amazon, LinkedIn, Instagram, TikTok, Facebook, YouTube, Reddit, and more) via the Bright Data CLI (bdata pipelines).
brightdata/skills
Use Bright Data's Discover API — intent-ranked, AI-relevance-scored web search at scale (not keyword SERP).
Web data extraction and discovery using the Bright Data JavaScript/TypeScript SDK (@brightdata/sdk). Brightdata SDK JS is an agent skill from brightdata/skills. Web data extraction and discovery using the Bright Data JavaScript/TypeScript SDK (@brightdata/sdk).
Brightdata SDK JS fits situations like: the user is working in Node.js/TypeScript and asks to scrape; find information from websites; the user mentions specific platforms like Amazon; asks for bulk data.
Run `npx skills add brightdata/skills --skill brightdata-sdk-js -a claude-code`. Or copy the skill folder (skills/js-sdk-best-practices in brightdata/skills) into .claude/skills/brightdata-sdk-js in your project. Claude Code loads it when a task matches its description.
Run `npx skills add brightdata/skills --skill brightdata-sdk-js -a codex`. Or copy the skill folder (skills/js-sdk-best-practices in brightdata/skills) into .agents/skills/brightdata-sdk-js in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add brightdata/skills --skill brightdata-sdk-js -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/brightdata-sdk-js, .gemini/skills/brightdata-sdk-js, .github/skills/brightdata-sdk-js and .opencode/skills/brightdata-sdk-js in your project.
Going by SKILL.md and its folder, Brightdata SDK JS needs the command-line tools its instructions call (npm) and credentials named BRIGHTDATA_API_TOKEN. Our summary lists: Python 3; Node.js; A credential in BRIGHTDATA_API_TOKEN.
SKILL.md names 3 domains. In commands or code: amazon.com and instagram.com; the agent is likely to contact these when it follows the instructions. As links in the text: brightdata.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Brightdata SDK JS is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Brightdata SDK JS: Scrapingbee CLI (ScrapingBee/scrapingbee-cli, 108 stars), Skyvern Browser Automation (Skyvern-AI/skyvern, 23k stars), Tavily Search API Integration (andrewyng/context-hub, 14k stars) and Gemini Interactions API (Ayuilos/Miffan, 192 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
brightdata (a GitHub organization) maintains it in brightdata/skills, which has 264 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 7, 2026.
Source: brightdata/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.