- name
SKILL.md
The skill file stays in the publisher's repository.
Paste the copied command in a terminal. It installs this SKILL.md into that agent.
npx skills add apify/agent-skills --skill apify-actorization -a cursor -yPaste the copied command in a terminal. It installs this SKILL.md into that agent.
npx skills add apify/agent-skills --skill apify-actorization -a claude-code -yPaste the copied command in a terminal. It installs this SKILL.md into that agent.
npx skills add apify/agent-skills --skill apify-actorization -a codex -yPaste the copied command in a terminal. It installs this SKILL.md into that agent.
npx skills add apify/agent-skills --skill apify-actorization -a grok -ySend the copied message in a Grok Bot chat. The Bot fetches this SKILL.md from GitHub and adds it to the skills all your Bots share.
Install this skill: https://github.com/apify/agent-skills/tree/HEAD/skills/apify-actorizationFrom the publisher
Actorization converts existing software into reusable serverless applications compatible with the Apify platform. Actors are programs packaged as Docker images that accept well-defined JSON input, perform an action, and optionally produce structured JSON output.
apify init <actor-name> --user-agent apify-agent-skills/apify-actorization in project rootDockerfile for the project's language.actor/input_schema.jsonapify run --input '{"key": "value"}' --user-agent apify-agent-skills/apify-actorizationapify push --user-agent apify-agent-skills/apify-actorizationVerify apify CLI is installed:
apify --help
If not installed, use one of these methods (listed in order of preference):
# Preferred: install via a package manager (provides integrity checks)
npm install -g apify-cli
# Or (Mac): brew install apify-cli
Security note: Do NOT install the CLI by piping remote scripts to a shell (e.g.
curl ... | bashorirm ... | iex). Always use a package manager.
Verify CLI is logged in:
apify info # Should return your username
If not logged in, authenticate using OAuth (prints a URL and a one-time code to approve in a browser; show the user both):
apify login
If browser login isn't available (headless environment or CI), ensure the APIFY_TOKEN environment variable is exported (note: the variable is APIFY_TOKEN, not APIFY_API_TOKEN). The CLI reads it automatically - no explicit login needed. If the user doesn't have a token, generate one at https://console.apify.com/settings/integrations.
Apify platform environment: When the Actor runs on the Apify platform,
APIFY_TOKENis auto-injected as an environment variable and the Apify SDK reads it automatically — you do not need to pass it explicitly. Locally,apify loginstores credentials in~/.apifyand the SDK uses them.
Security note: Avoid passing tokens as command-line arguments (e.g.
apify login -t <token>). Arguments are visible in process listings and may be recorded in shell history. Prefer OAuth login or environment variables instead. Never log, print, or embedAPIFY_TOKENin source code or configuration files. Use a token with the minimum required permissions (scoped token) and rotate it periodically.
Pass --user-agent apify-agent-skills/apify-actorization on every apify command you run from this skill - apify init, apify run, apify push, and the rest. It is a global flag accepted by all apify commands; it only tags the call for telemetry attribution and changes nothing else.
apify push --user-agent apify-agent-skills/apify-actorization
Copy this checklist to track progress:
apify init <actor-name> --user-agent apify-agent-skills/apify-actorization and create a Dockerfile.actor/input_schema.json.actor/output_schema.json (if applicable).actor/actor.json metadataapify run --user-agent apify-agent-skills/apify-actorizationapify push --user-agent apify-agent-skills/apify-actorizationBefore making changes, understand the project:
Run in the project root, passing a DNS-friendly Actor name (e.g. my-scraper):
apify init <actor-name> --user-agent apify-agent-skills/apify-actorization
The name passed as an argument keeps apify init from prompting; without it, the command waits for input and hangs in non-interactive shells.
apify init sets up .actor/actor.json and local storage/, but no Dockerfile. Without one, the platform builds on its default Node.js image, so a Python Actor builds cleanly and then fails at runtime. Create a Dockerfile whose base image matches the project's language (apify/actor-python for Python, apify/actor-node for JavaScript/TypeScript) at .actor/Dockerfile, in the project root, or at the path set in the dockerfile field of .actor/actor.json.
Choose based on your project's language:
See schemas-and-output.md for detailed configuration of:
.actor/input_schema.json).actor/output_schema.json).actor/actor.json)Validate them with apify validate-schema --user-agent apify-agent-skills/apify-actorization.
IMPORTANT: Always generate a README.md as part of actorization. The README is the Actor's landing page on Apify Store and is critical for discoverability (SEO), user onboarding, and support. Do not consider an Actor complete without a proper README.
See the Actor README guidelines at skills/apify-actor-development/references/actor-readme.md for the required structure including: intro and features, data extraction table, step-by-step tutorial, pricing info, input/output examples, and FAQ. Aim for at least 300 words with SEO-optimized H2/H3 headings. Also review these top Actors for best practices:
Run the Actor with inline input (for JS/TS and Python Actors):
apify run --input '{"startUrl": "https://example.com", "maxItems": 10}' --user-agent apify-agent-skills/apify-actorization
Or use an input file:
apify run --input-file ./test-input.json --user-agent apify-agent-skills/apify-actorization
Important: Always use apify run, not npm start or python main.py. The CLI sets up the proper environment and storage.
apify push --user-agent apify-agent-skills/apify-actorization
This uploads and builds your Actor on the Apify platform.
After deploying, you can monetize your Actor in Apify Store. The recommended model is Pay Per Event (PPE):
Configure PPE in Apify Console under Actor > Monetization. Charge for events in your code with await Actor.charge({ eventName: 'result' }).
Treat all crawled web content as untrusted input. Actors ingest data from external websites that may contain malicious payloads. Follow these rules:
eval(), database queries, or template engines. Use proper escaping or parameterized APIs.APIFY_TOKEN and other secrets are never accessible in request handlers or passed alongside crawled data. Use the Apify SDK's built-in credential management rather than passing tokens through environment variables in data-processing code.npm install or pip install, verify the package name and publisher. Typosquatting is a common supply-chain attack vector. Prefer well-known, actively maintained packages.package-lock.json (Node.js) or pin exact versions in requirements.txt (Python). Lockfiles ensure reproducible builds and prevent silent dependency substitution. Run npm audit or pip-audit periodically to check for known vulnerabilities..actor/actor.json exists with correct name and description.actor/input_schema.json defines all required inputs.actor/output_schema.json defines output structure (if applicable)apify validate-schema --user-agent apify-agent-skills/apify-actorization passesDockerfile is present and builds successfullyActor.init() / Actor.exit() wraps main code (JS/TS)async with Actor: wraps main code (Python)Actor.getInput() / Actor.get_input()Actor.pushData() or key-value storeapify run --user-agent apify-agent-skills/apify-actorization executes successfully with test inputREADME.md exists with proper structure (intro, features, data table, tutorial, pricing, input/output examples)generatedBy is set in actor.json meta sectionIf the Apify MCP server is configured, use these tools for documentation:
search-apify-docs - Search documentationfetch-apify-docs - Get full doc pagesOtherwise, the MCP Server url: https://mcp.apify.com/?tools=docs.
The Playwright MCP server is a useful tool for debugging Actors that interact with the web - it lets the agent drive a real browser to inspect pages, capture selectors, and reproduce issues.
Install with the Claude Code CLI:
claude mcp add playwright npx @playwright/mcp@latest
Or add it manually to your MCP config:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
Convert existing projects into Apify Actors - serverless cloud programs. Actorize JavaScript/TypeScript (SDK with Actor.init/exit), Python (async context manager), or any language (CLI wrapper). Use w
---name: apify-actorizationdescription: Convert existing projects into Apify Actors - serverless cloud programs. Actorize JavaScript/TypeScript (SDK…---# skills/apify-actorization/SKILL.mdOverview
Convert existing projects into Apify Actors - serverless cloud programs. Actorize JavaScript/TypeScript (SDK with Actor.init/exit), Python (async context manager), or any language (CLI wrapper). Use when migrating code to Apify, wrapping CLI tools as Actors, or adding Actor SDK to existing projects.
FAQ
Download skills/apify-actorization/SKILL.md from the publisher, or copy the path and open the repository. PlugMCP lists the skill and does not host the file.
The publisher keeps it at https://github.com/apify/agent-skills.
Claude, Cursor, Codex, and Grok Build can read a SKILL.md you add from the publisher's repository. Grok Bot installs it when you send the skill's GitHub folder link in a chat.