Universal web scraping and data extraction via Apify — 57+ Actors across Instagram, Facebook, TikTok, YouTube, Google Maps, Google Search, e-commerce, and more.
openclaw plugins install @apify/apify-openclaw-pluginRestart the Gateway after installation.
The plugin registers a single tool — apify — with three actions:
| Action | Purpose |
|---|---|
discover + query |
Search the Apify Store for Actors by keyword |
discover + actorId |
Fetch an Actor's input schema + README |
start + actorId + input |
Run any Apify Actor, returns runId / datasetId |
collect + runs |
Poll status and return results for completed runs |
The tool uses a two-phase async pattern: start fires off a run and returns immediately. collect fetches results when the run completes. The agent does other work in between.
- Create an Apify account at https://console.apify.com/
- Generate an API token in Account Settings → Integrations.
- Store it in plugin config or set the
APIFY_API_KEYenvironment variable.
{
plugins: {
entries: {
"apify": {
config: {
apiKey: "apify_api_...", // optional if APIFY_API_KEY env var is set
baseUrl: "https://api.apify.com",
maxResults: 20,
enabledTools: [], // empty = all tools enabled
},
},
},
},
// Make the tool available to agents:
tools: {
alsoAllow: ["apify"], // or "apify" or "group:plugins"
},
}Or use the interactive setup wizard:
openclaw apify setupdiscover (search) → discover (schema) → start → collect
- Search — Find Actors:
{ action: "discover", query: "amazon price scraper" } - Schema — Get input params:
{ action: "discover", actorId: "apify~google-search-scraper" } - Start — Run the Actor:
{ action: "start", actorId: "apify~google-search-scraper", input: { queries: ["OpenAI"] } } - Collect — Get results:
{ action: "collect", runs: [{ runId: "...", actorId: "...", datasetId: "..." }] }
Actor IDs use the username~actor-name format (tilde separator, not slash).
The tool description includes 57+ known Actors across these categories:
- Instagram — profiles, posts, comments, hashtags, reels, search, followers, tagged posts
- Facebook — pages, posts, comments, likes, reviews, groups, events, ads, reels, photos, marketplace
- TikTok — search, profiles, videos, comments, followers, hashtags, sounds, ads, trends, live
- YouTube — search, channels, comments, shorts, video-by-hashtag
- Google Maps — places, reviews, email extraction
- Other — Google Search, Google Trends, Booking.com, TripAdvisor, contact info, e-commerce
Most Actors accept arrays of URLs/queries in their input (e.g., startUrls, queries). Always batch multiple targets into a single run — one run with 5 URLs is cheaper and faster than 5 separate runs.
// 1. Search the Apify Store
const search = await apify({
action: "discover",
query: "linkedin company scraper",
});
// 2. Get an Actor's input schema
const schema = await apify({
action: "discover",
actorId: "compass~crawler-google-places",
});
// 3. Start a Google Search scrape
const started = await apify({
action: "start",
actorId: "apify~google-search-scraper",
input: { queries: ["OpenAI", "Anthropic"], maxPagesPerQuery: 1 },
label: "search",
});
// -> { runs: [{ runId, actorId, datasetId, status }] }
// 4. Collect results
const results = await apify({
action: "collect",
runs: started.runs,
});
// -> { completed: [...], pending: [...] }
// Instagram profile scraping
await apify({
action: "start",
actorId: "apify~instagram-profile-scraper",
input: { usernames: ["natgeo", "nasa"] },
});
// TikTok search
await apify({
action: "start",
actorId: "clockworks~tiktok-scraper",
input: { searchQueries: ["AI tools"], resultsPerPage: 20 },
});The tool description instructs agents to delegate apify calls to a sub-agent. The sub-agent handles the full discover → start → collect workflow and returns only the relevant extracted data — not raw API responses or run metadata.
- API keys are resolved from plugin config or
APIFY_API_KEYenv var — never logged or included in output. - Base URL validation — only
https://api.apify.comprefix is allowed (SSRF prevention). - External content wrapping — all scraped results are wrapped with untrusted content markers.
# Install dependencies
npm install
# Type check
npx tsc --noEmit
# Run tests
npx vitest run
# Pack (dry run)
npm pack --dry-runFor issues with this integration, contact integrations@apify.com.
MIT