From apify-pack
Runs a sample Apify Actor via apify-client to crawl sites and fetch results. For initial Apify setup, connectivity tests, or learning actor invocation and dataset retrieval.
How this skill is triggered — by the user, by Claude, or both
Slash command
/apify-pack:apify-hello-worldThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run a public Actor from the Apify Store, wait for it to finish, and retrieve the scraped data. This demonstrates the fundamental call-wait-collect pattern used in every Apify integration.
Run a public Actor from the Apify Store, wait for it to finish, and retrieve the scraped data. This demonstrates the fundamental call-wait-collect pattern used in every Apify integration.
npm install apify-client completedAPIFY_TOKEN environment variable setapify-install-auth if not readyimport { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// 1. Run an Actor and wait for it to finish
const run = await client.actor('apify/website-content-crawler').call({
startUrls: [{ url: 'https://docs.apify.com/academy' }],
maxCrawlPages: 5,
});
// 2. Retrieve results from the default dataset
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Crawled ${items.length} pages:`);
items.forEach(item => {
console.log(` - ${item.url}: ${item.text?.substring(0, 80)}...`);
});
Create hello-apify.ts (or .js) with the code above.
# With tsx (recommended)
npx tsx hello-apify.ts
# Or with Node.js (plain JS)
node hello-apify.js
The Actor runs on Apify's cloud infrastructure. When it finishes:
run.id — unique run identifierrun.status — SUCCEEDED, FAILED, TIMED-OUT, or ABORTEDrun.defaultDatasetId — ID of the dataset containing resultsrun.defaultKeyValueStoreId — ID of the KV store with metadata| Actor ID | Purpose | Typical Input |
|---|---|---|
apify/website-content-crawler | Crawl and extract text | { startUrls, maxCrawlPages } |
apify/web-scraper | General-purpose scraper | { startUrls, pageFunction } |
apify/cheerio-scraper | Fast HTML scraper | { startUrls, pageFunction } |
apify/google-search-scraper | Google SERP results | { queries, maxPagesPerQuery } |
// SYNCHRONOUS — .call() waits for the Actor to finish (simple, blocking)
const run = await client.actor('apify/web-scraper').call(input);
// ASYNCHRONOUS — .start() returns immediately, poll later
const run = await client.actor('apify/web-scraper').start(input);
// ... do other work ...
const finishedRun = await client.run(run.id).waitForFinish();
// Get all items (paginated internally)
const { items } = await client.dataset(run.defaultDatasetId).listItems();
// Get items with pagination control
const page1 = await client.dataset(run.defaultDatasetId).listItems({
limit: 100,
offset: 0,
});
// Download entire dataset as CSV/JSON/etc.
const buffer = await client.dataset(run.defaultDatasetId).downloadItems('csv');
// Get a named output from the key-value store
const screenshot = await client
.keyValueStore(run.defaultKeyValueStoreId)
.getRecord('screenshot');
const run = await client.actor('apify/web-scraper').call(
input, // Actor-specific input object
{
memory: 1024, // Memory in MB (128–32768, powers of 2)
timeout: 300, // Timeout in seconds (default: Actor's setting)
build: 'latest', // Which build to use
waitSecs: 120, // Max wait for .call() (0 = don't wait)
}
);
| Error | Cause | Solution |
|---|---|---|
Actor not found | Wrong Actor ID | Check ID at apify.com/store |
run.status === 'FAILED' | Actor crashed | Check run.statusMessage for details |
run.status === 'TIMED-OUT' | Exceeded timeout | Increase timeout or reduce workload |
Dataset is empty | Actor produced no output | Verify input parameters; check Actor logs |
402 Payment Required | Insufficient compute units | Top up at console.apify.com/billing |
import { ApifyClient } from 'apify-client';
import { writeFileSync } from 'fs';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
async function scrapeAndSave() {
console.log('Starting Actor run...');
const run = await client.actor('apify/website-content-crawler').call({
startUrls: [{ url: 'https://example.com' }],
maxCrawlPages: 10,
});
if (run.status !== 'SUCCEEDED') {
throw new Error(`Actor run failed: ${run.status} — ${run.statusMessage}`);
}
const { items } = await client.dataset(run.defaultDatasetId).listItems();
writeFileSync('results.json', JSON.stringify(items, null, 2));
console.log(`Saved ${items.length} items to results.json`);
}
scrapeAndSave().catch(console.error);
Proceed to apify-local-dev-loop for local Actor development.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin apify-packIntegrates Apify web scraping and automation into existing JS/TS or Python apps using the apify-client package. Use to call Actors, retrieve results, and integrate into data pipelines.
Creates, modifies, and debugs Apify Actor projects. Guides CLI setup, authentication, project bootstrap, and deployment.
Provides TypeScript patterns for Apify SDK Actors with Crawlee crawlers, proxy/data management, lifecycle handling, and typed apify-client wrappers.