diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 0b4846f4aa..41766bb8b9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -138,14 +138,14 @@ jobs: assert_no_redirect "http://localhost:8080" --request-target '/\evil.com/' assert_no_redirect "http://localhost:8080" --request-target '///\evil.com/' # Normal trailing-slash redirect must still work - assert_status "http://localhost:8080/platform/proxy/datacenter-proxy/" "302" + assert_status "http://localhost:8080/proxy/datacenter-proxy/" "302" echo "🧪 Checking Nginx responses... (apify-docs)" assert_header "http://localhost:8080/" "Content-Type" "text/html" assert_header "http://localhost:8080/" "Content-Type" "text/markdown" -H "Accept: text/markdown" - assert_header "http://localhost:8080/platform/proxy/datacenter-proxy" "Content-Type" "text/html" - assert_header "http://localhost:8080/platform/proxy/datacenter-proxy.md" "Content-Type" "text/markdown" - assert_header "http://localhost:8080/platform/proxy/datacenter-proxy" "Content-Type" "text/markdown" -H "Accept: text/markdown" + assert_header "http://localhost:8080/proxy/datacenter-proxy" "Content-Type" "text/html" + assert_header "http://localhost:8080/proxy/datacenter-proxy.md" "Content-Type" "text/markdown" + assert_header "http://localhost:8080/proxy/datacenter-proxy" "Content-Type" "text/markdown" -H "Accept: text/markdown" assert_header "http://localhost:8080/img/docs-og.png" "Content-Type" "image/png" assert_header "http://localhost:8080/img/javascript-40x40.svg" "Content-Type" "image/svg" assert_header "http://localhost:8080/llms.txt" "Content-Type" "text/markdown" @@ -172,7 +172,7 @@ jobs: assert_html_md_alternate "http://localhost:8080/api/v2/dataset-get" "https://docs.apify.com/api/v2/dataset-get.md" assert_html_md_alternate "http://localhost:8080/academy/tutorials" "https://docs.apify.com/academy/tutorials.md" # Sanity check: a regular (non-excluded) page also has the alternate. - assert_html_md_alternate "http://localhost:8080/platform/proxy/datacenter-proxy" "https://docs.apify.com/platform/proxy/datacenter-proxy.md" + assert_html_md_alternate "http://localhost:8080/proxy/datacenter-proxy" "https://docs.apify.com/proxy/datacenter-proxy.md" echo "🧪 Checking Nginx responses... (apify-sdk-js)" assert_final_content_type "http://localhost:8080/sdk/js" "text/html" diff --git a/apify-api/openapi/components/objects/actor-runs/charge.yaml b/apify-api/openapi/components/objects/actor-runs/charge.yaml index 612f22da3c..f690647a6f 100644 --- a/apify-api/openapi/components/objects/actor-runs/charge.yaml +++ b/apify-api/openapi/components/objects/actor-runs/charge.yaml @@ -9,7 +9,7 @@ byRunId: :::info Learn more about pay-per-event pricing - For more details about pay-per-event (PPE) pricing, refer to our [PPE documentation](/platform/actors/publishing/monetize/pay-per-event). + For more details about pay-per-event (PPE) pricing, refer to our [PPE documentation](/actors/publishing/monetize/pay-per-event). ::: diff --git a/apify-api/openapi/components/parameters/datasetParameters.yaml b/apify-api/openapi/components/parameters/datasetParameters.yaml index a00474ad3d..e89eac2f8b 100644 --- a/apify-api/openapi/components/parameters/datasetParameters.yaml +++ b/apify-api/openapi/components/parameters/datasetParameters.yaml @@ -236,7 +236,7 @@ view: description: | Defines the view configuration for dataset items based on the schema definition. This parameter determines how the data will be filtered and presented. - For complete specification details, see the [dataset schema documentation](/platform/actors/development/actor-definition/dataset-schema). + For complete specification details, see the [dataset schema documentation](/actors/development/actor-definition/dataset-schema). schema: type: string example: overview diff --git a/apify-api/openapi/components/schemas/actors/ActorDefinition.yaml b/apify-api/openapi/components/schemas/actors/ActorDefinition.yaml index f4cd18036d..de1db5010b 100644 --- a/apify-api/openapi/components/schemas/actors/ActorDefinition.yaml +++ b/apify-api/openapi/components/schemas/actors/ActorDefinition.yaml @@ -48,7 +48,7 @@ properties: examples: [get(input, startUrls.length, 1) * 1024] - type: integer examples: [1024] - description: Specifies the default amount of memory in megabytes to be used when the Actor is started. Can be an integer or a [dynamic memory expression](/platform/actors/development/actor-definition/dynamic-actor-memory). + description: Specifies the default amount of memory in megabytes to be used when the Actor is started. Can be an integer or a [dynamic memory expression](/actors/development/actor-definition/dynamic-actor-memory). minMemoryMbytes: type: integer minimum: 128 diff --git a/apify-api/openapi/components/schemas/datasets/Dataset.yaml b/apify-api/openapi/components/schemas/datasets/Dataset.yaml index 38fc28b9f8..af8afcff41 100644 --- a/apify-api/openapi/components/schemas/datasets/Dataset.yaml +++ b/apify-api/openapi/components/schemas/datasets/Dataset.yaml @@ -50,7 +50,7 @@ properties: description: "" schema: type: [object, "null"] - description: Defines the schema of items in your dataset, the full specification can be found in [Apify docs](/platform/actors/development/actor-definition/dataset-schema) + description: Defines the schema of items in your dataset, the full specification can be found in [Apify docs](/actors/development/actor-definition/dataset-schema) example: actorSpecification: 1 title: My dataset diff --git a/apify-docs-theme/src/config.js b/apify-docs-theme/src/config.js index c53b8d035c..634b1ca7c9 100644 --- a/apify-docs-theme/src/config.js +++ b/apify-docs-theme/src/config.js @@ -20,119 +20,118 @@ const themeConfig = { }, items: [ { - label: 'Academy', - href: `${absoluteUrl}/academy`, - activeBasePath: 'academy', + label: 'Get started', + href: `${absoluteUrl}/get-started`, + activeBasePath: 'get-started', position: 'left', target: '_self', rel: 'dofollow', }, { - label: 'Platform', - href: `${absoluteUrl}/platform`, - className: 'navbar__active', - activeBasePath: 'platform', + label: 'Actors', + href: `${absoluteUrl}/actors`, + activeBasePath: 'actors', position: 'left', target: '_self', rel: 'dofollow', }, { - label: 'API', - type: 'dropdown', - to: `${absoluteUrl}/api`, + label: 'Storage', + href: `${absoluteUrl}/storage`, + activeBasePath: 'storage', + position: 'left', target: '_self', rel: 'dofollow', - activeBasePath: 'api', + }, + { + label: 'Proxy', + href: `${absoluteUrl}/proxy`, + activeBasePath: 'proxy', position: 'left', - items: [ - { - label: 'Reference', - href: `${absoluteUrl}/api/v2`, - target: '_self', - rel: 'dofollow', - }, - { - label: 'Client for JavaScript', - href: `${absoluteUrl}/api/client/js/docs`, - target: '_self', - rel: 'dofollow', - }, - { - label: 'Client for Python', - href: `${absoluteUrl}/api/client/python/docs`, - target: '_self', - rel: 'dofollow', - }, - ], + target: '_self', + rel: 'dofollow', }, { - label: 'SDK', - type: 'dropdown', - to: `${absoluteUrl}/sdk`, - activeBasePath: 'sdk', + label: 'Account', + href: `${absoluteUrl}/account`, + activeBasePath: 'account', position: 'left', target: '_self', rel: 'dofollow', - items: [ - { - label: 'SDK for JavaScript', - href: `${absoluteUrl}/sdk/js/docs/overview`, - target: '_self', - rel: 'dofollow', - }, - { - html: 'SDK for Python', - href: `${absoluteUrl}/sdk/python/docs/overview`, - target: '_self', - rel: 'dofollow', - }, - ], }, { - label: 'CLI', - href: `${absoluteUrl}/cli/docs`, + label: 'Integrations', + href: `${absoluteUrl}/integrations`, + activeBasePath: 'integrations', position: 'left', - activeBasePath: 'cli', target: '_self', rel: 'dofollow', }, { - label: 'Open source', - type: 'dropdown', - to: `${absoluteUrl}/open-source`, - activeBasePath: 'open-source', + label: 'Limits', + href: `${absoluteUrl}/limits`, + activeBasePath: 'limits', + position: 'left', target: '_self', + rel: 'dofollow', + }, + { + label: 'Security', + href: `${absoluteUrl}/security`, + activeBasePath: 'security', position: 'left', - className: 'navbar__item', + target: '_self', + rel: 'dofollow', + }, + { + label: 'Academy', + href: `${absoluteUrl}/academy`, + activeBasePath: 'academy', + position: 'right', + target: '_self', + rel: 'dofollow', + }, + { + label: 'APIs, SDKs & CLI', + type: 'dropdown', + activeBaseRegex: '^/(api|sdk|cli)/', + position: 'right', items: [ { - label: 'Crawlee', - href: 'https://crawlee.dev', + label: 'API Reference', + href: `${absoluteUrl}/api/v2`, + target: '_self', rel: 'dofollow', }, { - label: 'Fingerprint Suite', - href: 'https://github.com/apify/fingerprint-suite', - }, - { - label: 'impit', - href: 'https://github.com/apify/impit', + label: 'SDK for JavaScript', + href: `${absoluteUrl}/sdk/js/docs/overview`, + target: '_self', + rel: 'dofollow', }, { - label: 'MCP CLI', - href: 'https://github.com/apify/mcpc', + label: 'SDK for Python', + href: `${absoluteUrl}/sdk/python/docs/overview`, + target: '_self', + rel: 'dofollow', }, { - label: 'Actor whitepaper', - href: 'https://whitepaper.actor', + label: 'Client for JavaScript', + href: `${absoluteUrl}/api/client/js/docs`, + target: '_self', + rel: 'dofollow', }, { - label: 'proxy-chain', - href: 'https://github.com/apify/proxy-chain', + label: 'Client for Python', + href: `${absoluteUrl}/api/client/python/docs`, + target: '_self', + rel: 'dofollow', }, { - label: 'Apify on GitHub', - href: 'https://github.com/apify', + label: 'CLI', + href: `${absoluteUrl}/cli/docs`, + target: '_self', + rel: 'dofollow', }, ], }, @@ -163,8 +162,14 @@ const themeConfig = { rel: 'dofollow', }, { - label: 'Platform', - href: `${absoluteUrl}/platform`, + label: 'Get started', + href: `${absoluteUrl}/get-started`, + target: '_self', + rel: 'dofollow', + }, + { + label: 'Actors', + href: `${absoluteUrl}/actors`, target: '_self', rel: 'dofollow', }, @@ -211,18 +216,45 @@ const themeConfig = { ], }, { - title: 'Other', + title: 'Open source', items: [ { - label: 'CLI', - href: `${absoluteUrl}/cli/docs`, - position: 'left', - target: '_self', + label: 'Crawlee', + href: 'https://crawlee.dev', rel: 'dofollow', }, { - label: 'Open source', - href: `${absoluteUrl}/open-source`, + label: 'Fingerprint Suite', + href: 'https://github.com/apify/fingerprint-suite', + }, + { + label: 'impit', + href: 'https://github.com/apify/impit', + }, + { + label: 'MCP CLI', + href: 'https://github.com/apify/mcpc', + }, + { + label: 'Actor whitepaper', + href: 'https://whitepaper.actor', + }, + { + label: 'proxy-chain', + href: 'https://github.com/apify/proxy-chain', + }, + { + label: 'Apify on GitHub', + href: 'https://github.com/apify', + }, + ], + }, + { + title: 'Other', + items: [ + { + label: 'CLI', + href: `${absoluteUrl}/cli/docs`, position: 'left', target: '_self', rel: 'dofollow', diff --git a/apify-docs-theme/src/theme/DocItemContent/index.js b/apify-docs-theme/src/theme/DocItemContent/index.js index c7a02d2ccc..219637daf8 100644 --- a/apify-docs-theme/src/theme/DocItemContent/index.js +++ b/apify-docs-theme/src/theme/DocItemContent/index.js @@ -51,7 +51,14 @@ export default function DocItemContent({ children }) { '/api/v2/logs', '/api/v2/users', '/api/client', - '/platform', + '/get-started', + '/actors', + '/storage', + '/proxy', + '/account', + '/integrations', + '/limits', + '/security', '/sdk', '/cli', '/academy', diff --git a/apify-docs-theme/src/theme/SearchBar/index.js b/apify-docs-theme/src/theme/SearchBar/index.js index 1a3dd6c2fc..70837cd564 100644 --- a/apify-docs-theme/src/theme/SearchBar/index.js +++ b/apify-docs-theme/src/theme/SearchBar/index.js @@ -17,7 +17,17 @@ import './styles.css'; */ function matchesCurrentInstance(href, baseUrl) { if (baseUrl === '/') { - return href.startsWith('/academy') || href.startsWith('/platform'); + return ( + href.startsWith('/academy') || + href.startsWith('/get-started') || + href.startsWith('/actors') || + href.startsWith('/storage') || + href.startsWith('/proxy') || + href.startsWith('/account') || + href.startsWith('/integrations') || + href.startsWith('/limits') || + href.startsWith('/security') + ); } return href.startsWith(baseUrl); diff --git a/docusaurus.config.js b/docusaurus.config.js index 4b45acf131..f23b9ccef9 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -120,7 +120,7 @@ module.exports = { showLastUpdateTime: false, editUrl: 'https://github.com/apify/apify-docs/edit/master/', path: './sources/platform', - routeBasePath: 'platform', + routeBasePath: '/', sidebarPath: require.resolve('./sources/platform/sidebars.js'), rehypePlugins: [externalLinkProcessor], }, diff --git a/nginx.conf b/nginx.conf index 45c2370440..0c8e5eedb3 100644 --- a/nginx.conf +++ b/nginx.conf @@ -318,57 +318,42 @@ server { rewrite ^/about$ /platform permanent; rewrite ^/access-rights$ /platform/collaboration/access-rights permanent; rewrite ^/actor$ /platform/actors permanent; - rewrite ^/actors$ /platform/actors permanent; rewrite ^/tutorials/integrations$ /platform/integrations permanent; - rewrite ^/integrations$ /platform/integrations permanent; rewrite ^/monitoring$ /platform/monitoring permanent; - rewrite ^/proxy$ /platform/proxy permanent; rewrite ^/robotic-process-automation$ / permanent; rewrite ^/scheduler$ /platform/schedules permanent; rewrite ^/schedules$ /platform/schedules permanent; - rewrite ^/storage$ /platform/storage permanent; rewrite ^/scraping$ /platform/actors/running permanent; rewrite ^/tutorials$ /platform/actors/running permanent; rewrite ^/web-scraping-101$ /academy/scraping-basics-javascript?legacy-js-course=/ permanent; rewrite ^/access-rights/list-of-permissions$ /platform/collaboration/list-of-permissions permanent; rewrite ^/access-rights/organization-account$ /platform/collaboration/organization-account permanent; rewrite ^/actor/development$ /platform/actors/development permanent; - rewrite ^/actors/development$ /platform/actors/development permanent; rewrite ^/actor/examples$ /platform/actors permanent; rewrite ^/actors/examples$ /platform/actors permanent; rewrite ^/actor/limits$ /platform/limits permanent; rewrite ^/actors/limits$ /platform/limits permanent; rewrite ^/actors/paid-actors$ /platform/actors/running/actors-in-store#paid-actors permanent; - rewrite ^/actors/publishing$ /platform/actors/publishing permanent; rewrite ^/actor/run$ /platform/actors/running permanent; rewrite ^/actor/running$ /platform/actors/running permanent; rewrite ^/actors/run$ /platform/actors/running permanent; - rewrite ^/actors/running$ /platform/actors/running permanent; rewrite ^/actor/security$ /platform/security permanent; rewrite ^/actors/security$ /platform/security permanent; rewrite ^/tasks$ /platform/actors/running/tasks permanent; rewrite ^/actors/tasks$ /platform/actors/running/tasks permanent; - rewrite ^/integrations/slack$ /platform/integrations/slack permanent; rewrite ^/webhooks$ /platform/integrations/webhooks permanent; - rewrite ^/integrations/webhooks$ /platform/integrations/webhooks permanent; rewrite ^/monitoring/actor-or-task-run-failure$ /platform/monitoring permanent; rewrite ^/monitoring/check-data-quality$ /platform/monitoring permanent; rewrite ^/monitoring/monitor-multiple-tasks$ /platform/monitoring permanent; rewrite ^/monitoring/monitor-shared-datasets$ /platform/monitoring permanent; rewrite ^/robotic-process-automation/tips-and-tricks$ /academy/advanced-web-scraping/tips-and-tricks-robustness permanent; rewrite ^/proxy/connection-settings$ /platform/proxy/usage permanent; - rewrite ^/proxy/datacenter-proxy$ /platform/proxy/datacenter-proxy permanent; - rewrite ^/proxy/google-serp-proxy$ /platform/proxy/google-serp-proxy permanent; rewrite ^/proxy/residential-proxy/nodejs-examples$ /platform/proxy/residential-proxy permanent; rewrite ^/proxy/residential-proxy/python-examples$ /platform/proxy/residential-proxy permanent; rewrite ^/proxy/residential-proxy/php-examples$ /platform/proxy/residential-proxy permanent; - rewrite ^/proxy/residential-proxy$ /platform/proxy/residential-proxy permanent; rewrite ^/proxy/troubleshooting$ /platform/proxy permanent; rewrite ^/web-scraping-101/anti-scraping-techniques$ /academy/anti-scraping/techniques permanent; rewrite ^/web-scraping-101/web-scraping-techniques$ / permanent; - rewrite ^/storage/dataset$ /platform/storage/dataset permanent; - rewrite ^/storage/key-value-store$ /platform/storage/key-value-store permanent; - rewrite ^/storage/request-queue$ /platform/storage/request-queue permanent; rewrite ^/access-rights/organization-account/how-to-use$ /platform/collaboration/organization-account/how-to-use permanent; rewrite ^/access-rights/organization-account/setup$ /platform/collaboration/organization-account/setup permanent; rewrite ^/tutorials/analyze-pages-and-fix-errors$ /academy/node-js/analyzing-pages-and-fixing-errors permanent; @@ -395,7 +380,6 @@ server { rewrite ^/tutorials/use-apify-from-php$ /academy/php/use-apify-from-php permanent; rewrite ^/actors/running/compute-units$ /platform/actors/running/usage-and-resources#what-is-a-compute-unit permanent; rewrite ^/actor/running/input-and-output$ /platform/actors/running/input-and-output#input permanent; - rewrite ^/actors/running/input-and-output$ /platform/actors/running/input-and-output#input permanent; rewrite ^/actors/running/input$ /platform/actors/running/input-and-output#input permanent; rewrite ^/actors/memory-and-cpu$ /platform/actors/running/usage-and-resources#memory permanent; rewrite ^/actors/running/memory-and-cpu$ /platform/actors/running/usage-and-resources#memory permanent; @@ -424,11 +408,8 @@ server { rewrite ^/actors/development/state-persistence$ /platform/actors/development/builds-and-runs/state-persistence permanent; rewrite ^/actors/development/testing-and-maintenance$ /platform/actors/development/automated-tests permanent; rewrite ^/webhooks/actions$ /platform/integrations/webhooks/actions permanent; - rewrite ^/integrations/webhooks/actions$ /platform/integrations/webhooks/actions permanent; rewrite ^/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; - rewrite ^/integrations/webhooks/ad-hoc-webhooks$ /platform/integrations/webhooks/ad-hoc-webhooks permanent; rewrite ^/webhooks/events$ /platform/integrations/webhooks/events permanent; - rewrite ^/integrations/webhooks/events$ /platform/integrations/webhooks/events permanent; rewrite ^/proxy/datacenter-proxy/nodejs-examples$ /platform/proxy/datacenter-proxy permanent; rewrite ^/proxy/datacenter-proxy/python-examples$ /platform/proxy/datacenter-proxy permanent; rewrite ^/proxy/datacenter-proxy/php-examples$ /platform/proxy/datacenter-proxy permanent; @@ -806,6 +787,33 @@ server { # Misc rewrite ^/platform/integrations/llama$ /platform/integrations/llama-index permanent; + + # === IA v3 flip: drop the /platform prefix === + # Structural moves first (these MUST precede the blanket catch-all, because a + # naive /platform/X -> /X strip would 404 for sections that relocated). + # console/store is KEPT at /console/store on the v3 branch (open decision D12), + # so it gets a clean strip, not a "page removed" soft-land. + rewrite ^/platform/console/store$ /console/store permanent; + rewrite ^/platform/console$ /account/console permanent; + rewrite ^/platform/console/(.*)$ /account/$1 permanent; + rewrite ^/platform/collaboration/organization-account(/.*)?$ /account/collaboration/organization$1 permanent; + rewrite ^/platform/collaboration(/.*)?$ /account/collaboration$1 permanent; + rewrite ^/platform/actors/development/quick-start/?(.*)$ /get-started/$1 permanent; + rewrite ^/platform/schedules$ /actors/running/schedules permanent; + rewrite ^/platform/monitoring$ /actors/running/monitoring permanent; + # "Apify for AI agents" moved from Integrations into Get Started + rewrite ^/platform/integrations/agent-onboarding$ /get-started/agent-onboarding permanent; + # (storage/usage and proxy/usage already redirect to /platform/storage and + # /platform/proxy via the reorg rules above; the catch-all below carries them + # the rest of the way to /storage and /proxy. The post-flip cleanup PR collapses + # that double-hop.) + + # Soft-landings for deleted URLs (better UX than a 404) + rewrite ^/platform/integrations/airtable/console-integration$ /integrations/airtable permanent; + rewrite ^/platform/?$ / permanent; + + # Catch-all: blanket /platform/X -> /X. MUST be the last /platform rule. + rewrite ^/platform/(.*)$ /$1 permanent; } # Note: crawlee.dev server block has been moved to crawlee repository: diff --git a/scripts/checkNavHeaders.mjs b/scripts/checkNavHeaders.mjs index 550a738764..7078206e14 100644 --- a/scripts/checkNavHeaders.mjs +++ b/scripts/checkNavHeaders.mjs @@ -47,20 +47,21 @@ const MD_LINK = /^\[(?:\\.|[^\]\\])+\]\(https:\/\/docs\.apify\.com\/\S+\)$/; // children, previous and next, while each page only asserts what its position in // the tree guarantees (so reordering siblings can't make it flaky). const PAGES = [ - // Section landings: only the universal keys, sometimes a `next`. - { path: '/platform.md', keys: ['next'] }, + // Section landings: only the universal keys, sometimes a `next`. In the v3 IA + // each section has its own sidebar, so a section landing is the first item + // (no `previous`) and a sibling link rather than a category (no `children`). { path: '/academy.md', keys: [] }, { path: '/api.md', keys: [] }, { path: '/legal.md', keys: ['next'] }, + { path: '/actors.md', keys: ['next'] }, + { path: '/storage.md', keys: ['next'] }, + { path: '/integrations.md', keys: ['next'] }, // Category pages: have a `children` list plus neighbours. - { path: '/platform/actors.md', keys: ['children', 'previous', 'next'] }, - { path: '/platform/actors/running.md', keys: ['children', 'previous', 'next'] }, - { path: '/platform/storage.md', keys: ['children', 'previous', 'next'] }, - { path: '/platform/integrations.md', keys: ['children', 'previous', 'next'] }, + { path: '/actors/running.md', keys: ['children', 'previous', 'next'] }, { path: '/api/v2.md', keys: ['children', 'next'] }, // Leaf pages: no children, but sit between two neighbours. - { path: '/platform/storage/dataset.md', keys: ['previous', 'next'] }, - { path: '/platform/proxy/datacenter-proxy.md', keys: ['previous', 'next'] }, + { path: '/storage/dataset.md', keys: ['previous', 'next'] }, + { path: '/proxy/datacenter-proxy.md', keys: ['previous', 'next'] }, { path: '/api/v2/dataset-get.md', keys: ['previous', 'next'] }, { path: '/academy/tutorials.md', keys: ['next'] }, { path: '/legal/general-terms-and-conditions.md', keys: ['previous', 'next'] }, diff --git a/sources/academy/ai/ai-agents.mdx b/sources/academy/ai/ai-agents.mdx index 33276a465d..fec6e3898f 100644 --- a/sources/academy/ai/ai-agents.mdx +++ b/sources/academy/ai/ai-agents.mdx @@ -52,7 +52,7 @@ _Example input:_ _Example output:_ - Text response with insights -- Data stored in Apify [Dataset](/platform/storage/dataset) +- Data stored in Apify [Dataset](/storage/dataset) :::note Agent memory @@ -253,7 +253,7 @@ Apify's pay-per-event (PPE) pricing model allows charging users based on specifi :::info How pay-per-event pricing works -If you want more details about PPE pricing, refer to our [PPE documentation](/platform/actors/publishing/monetize/pay-per-event). +If you want more details about PPE pricing, refer to our [PPE documentation](/actors/publishing/monetize/pay-per-event). ::: diff --git a/sources/academy/build-and-publish/actor-ideas/what_software_an_actor_can_be.md b/sources/academy/build-and-publish/actor-ideas/what_software_an_actor_can_be.md index 12df65bc90..3b54ca1376 100644 --- a/sources/academy/build-and-publish/actor-ideas/what_software_an_actor_can_be.md +++ b/sources/academy/build-and-publish/actor-ideas/what_software_an_actor_can_be.md @@ -12,7 +12,7 @@ Learn what kind of software tools are suitable to be packaged and published as A ## What can you build as an Actor -[Actors](https://docs.apify.com/platform/actors) are a new way for building serverless micro-apps, which are easy to develop, share, integrate, and build upon. +[Actors](https://docs.apify.com/actors) are a new way for building serverless micro-apps, which are easy to develop, share, integrate, and build upon. They are useful for backend automation jobs, which users set up, integrate into their workflow, and let run in the background, rather than consumer-facing applications that users need to interact with. diff --git a/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md b/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md index 7e6f014fd0..b9796d88b1 100644 --- a/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md +++ b/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md @@ -34,7 +34,7 @@ Monetizing your Actor on the Apify platform involves several key steps: :::info Pass platform usage costs to users -Optionally, you can [pass costs associated with the platform usage](../../../platform/actors/publishing/monetize/pay-per-event#pass-platform-usage-to-users) to the users. +Optionally, you can [pass costs associated with the platform usage](/actors/publishing/monetize/pay-per-event#platform-usage-costs) to the users. Profit calculation: `profit = 0.8 * revenue` @@ -62,7 +62,7 @@ Profit calculation: `profit = 0.8 * revenue` :::info Pay-per-event details -If you want more details about PPE pricing, refer to our [PPE documentation](/platform/actors/publishing/monetize/pay-per-event). +If you want more details about PPE pricing, refer to our [PPE documentation](/actors/publishing/monetize/pay-per-event). ::: @@ -80,7 +80,7 @@ If you want more details about PPE pricing, refer to our [PPE documentation](/pl :::info Rental pricing details -If you want more details about rental pricing, refer to our [rental pricing documentation](/platform/actors/publishing/monetize/rental). +If you want more details about rental pricing, refer to our [rental pricing documentation](/actors/publishing/monetize/rental). ::: @@ -130,7 +130,7 @@ Learn more about what makes a good readme here: [How to create an Actor README]( ### Adapt when needed -Don’t be afraid to experiment with pricing, especially at the start. You can monitor your results in the dashboard and adjust if necessary. You can also choose to [pass platform usage costs to users](/platform/actors/publishing/monetize/pay-per-event#pass-platform-usage-to-users) while you’re still figuring out the right price. +Don’t be afraid to experiment with pricing, especially at the start. You can monitor your results in the dashboard and adjust if necessary. You can also choose to [pass platform usage costs to users](/actors/publishing/monetize/pay-per-event#platform-usage-costs) while you’re still figuring out the right price. To estimate pricing, run a few test runs and review the statistics in the Actor [**Analytics**](https://console.apify.com/actors?tab=analytics) tab. @@ -157,8 +157,8 @@ Example of useful pricing estimates from the **Analytics** tab: ## Resources - Learn about [incentives behind monetization](https://apify.com/partners/actor-developers) -- Detailed guide to [setting up monetization models](/platform/actors/publishing/monetize) -- Guide to [publishing Actors](/platform/actors/publishing) +- Detailed guide to [setting up monetization models](/actors/publishing/monetize) +- Guide to [publishing Actors](/actors/publishing) - Watch our webinar on how to [build, publish and monetize Actors](https://www.youtube.com/watch?v=4nxStxC1BJM) - Read a blog post from our CEO on the [reasoning behind monetizing Actors](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) - Learn about the [Creator plan](https://apify.com/pricing/creator-plan), which allows you to create and freely test your own Actors for $1 diff --git a/sources/academy/build-and-publish/apify-store-basics/how_store_works.md b/sources/academy/build-and-publish/apify-store-basics/how_store_works.md index aad7af8155..ce76977a58 100644 --- a/sources/academy/build-and-publish/apify-store-basics/how_store_works.md +++ b/sources/academy/build-and-publish/apify-store-basics/how_store_works.md @@ -102,9 +102,9 @@ Learn more about how to handle the [Issues tab](/academy/actor-marketing-playboo ## How Apify Store search works -Search ranking evaluates parameters similar to those in the [Actor quality score](/platform/actors/publishing/quality-score). As a result, the two correlate strongly: Actors with higher quality scores tend to rank higher in [Apify Store](https://apify.com/store) search and the [Apify MCP server](/platform/integrations/mcp) `search-actors` tool, though no specific position is guaranteed. +Search ranking evaluates parameters similar to those in the [Actor quality score](/actors/publishing/quality-score). As a result, the two correlate strongly: Actors with higher quality scores tend to rank higher in [Apify Store](https://apify.com/store) search and the [Apify MCP server](/integrations/mcp) `search-actors` tool, though no specific position is guaranteed. -To improve your Actor's visibility in search, focus on improving its quality score. For what the score measures and how to influence each category, see [Actor quality score](/platform/actors/publishing/quality-score). +To improve your Actor's visibility in search, focus on improving its quality score. For what the score measures and how to influence each category, see [Actor quality score](/actors/publishing/quality-score). ### Search in Apify Console is personalized @@ -112,8 +112,8 @@ In [Apify Console](https://console.apify.com), search results are personalized f ## Resources -- Best practices on setting up [testing for your Actor](https://docs.apify.com/platform/actors/publishing/test) +- Best practices on setting up [testing for your Actor](https://docs.apify.com/actors/publishing/test) - What are Apify-maintained and [Community-maintained Actors](https://help.apify.com/en/articles/6999799-what-are-apify-maintained-and-community-maintained-actors)? On ownership, maintenance, features, and support -- Step-by-step guide on how to [publish your Actor](https://docs.apify.com/platform/actors/publishing) +- Step-by-step guide on how to [publish your Actor](https://docs.apify.com/actors/publishing) - Watch our webinar on how to [build, publish and monetize Actors](https://www.youtube.com/watch?v=4nxStxC1BJM) -- Detailed [guide on pricing models](https://docs.apify.com/platform/actors/running/actors-in-store) for Actors in Store +- Detailed [guide on pricing models](https://docs.apify.com/actors/running/actors-in-store) for Actors in Store diff --git a/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx b/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx index 7b19cd4dfc..c4e9251404 100644 --- a/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx +++ b/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx @@ -37,7 +37,7 @@ For open-source developers, Actorization adds value without extra costs: ::: -For example, IBM’s [Docling project](https://github.com/docling-project/docling) merged our pull request that actorized their popular open-source GitHub repo and added the [Apify Actor status badge](/platform/actors/publishing/status-badge) to the README: +For example, IBM’s [Docling project](https://github.com/docling-project/docling) merged our pull request that actorized their popular open-source GitHub repo and added the [Apify Actor status badge](/actors/publishing/status-badge) to the README: ![Docling Apify badge](images/actorization-playbook/docling-apify-badge.png) @@ -60,14 +60,14 @@ For more inspiration on which open-source libraries to wrap as Actors, see the [ Use these criteria to decide if your project is a good candidate for Actorization: -1. _Is it self-contained?_ Does the project work non-interactively, with a well-defined, preferably structured input and output format? Positive examples include various data processing utilities, web scrapers and other automation scripts. Negative examples are GUI applications or applications that run indefinitely. If you want to run HTTP APIs on Apify, you can do so using [Actor Standby](/platform/actors/development/programming-interface/standby). -2. _Can the state be stored in Apify storages?_ If the application has state that can be stored in a small number of files it can utilize [key-value store](/platform/storage/key-value-store), or if it processes records that can be stored in Apify’s [request queue](/platform/storage/request-queue). If the output consists of one or many similar JSON objects, it can utilize [dataset](/platform/storage/dataset). +1. _Is it self-contained?_ Does the project work non-interactively, with a well-defined, preferably structured input and output format? Positive examples include various data processing utilities, web scrapers and other automation scripts. Negative examples are GUI applications or applications that run indefinitely. If you want to run HTTP APIs on Apify, you can do so using [Actor Standby](/actors/development/programming-interface/standby). +2. _Can the state be stored in Apify storages?_ If the application has state that can be stored in a small number of files it can utilize [key-value store](/storage/key-value-store), or if it processes records that can be stored in Apify’s [request queue](/storage/request-queue). If the output consists of one or many similar JSON objects, it can utilize [dataset](/storage/dataset). 3. _Can it be containerized?_ The project needs to be able to run in a Docker container. Apify currently does not support GPU workloads. External services (e.g., databases) need to be managed by developer. 4. _Can it use Apify tooling?_ Javascript/Typescript applications and Python applications can be Actorized with the help of the [Apify SDK](/sdk), which makes easy for your code to interacts with the Apify platform. Applications that can be run using just the CLI can also be Actorized using the Apify CLI by writing a simple shell script that retrieves user input using [Apify CLI](/cli/), then runs your application and sends the results back to Apify (also using the CLI). If your application is implemented differently, you can still call the [Apify API](/api/v2) directly - it’s just HTTP and pretty much every language has support for that but the implementation is less straightforward. ## Actorization guide -This guide outlines the steps to convert your application into an Apify [Actor](/platform/actors). Follow the documentation links for detailed information - this guide provides an overview rather than exhaustive instructions. +This guide outlines the steps to convert your application into an Apify [Actor](/actors). Follow the documentation links for detailed information - this guide provides an overview rather than exhaustive instructions. ### 1. Add Actor metadata - the `.actor` folder @@ -85,14 +85,14 @@ In case you're starting a new project, we strongly advise to start with a [templ :::note Quick Start for beginners - For a step-by-step introduction to creating your first Actor (including tech stack choices and development paths), see [Quick Start](/platform/actors/development/quick-start). + For a step-by-step introduction to creating your first Actor (including tech stack choices and development paths), see [Get started](/get-started). ::: -The newly created `.actor` folder contains an `actor.json` file - a manifest of the Actor. See [documentation](/platform/actors/development/actor-definition/actor-json) for more details +The newly created `.actor` folder contains an `actor.json` file - a manifest of the Actor. See [documentation](/actors/development/actor-definition/actor-json) for more details -You must also make sure your Actor has a Dockerfile and that it installs everything needed to successfully run your application. Check out [Dockerfile documentation](/platform/actors/development/actor-definition/dockerfile) by Apify. If you don't want to use these, you are free to use any image as the base of your Actor. +You must also make sure your Actor has a Dockerfile and that it installs everything needed to successfully run your application. Check out [Dockerfile documentation](/actors/development/actor-definition/dockerfile) by Apify. If you don't want to use these, you are free to use any image as the base of your Actor. When launching the Actor, the Apify platform will simply run your Docker image. This means that a) you need to configure the `ENTRYPOINT` and `CMD` directives so that it launches your application and b) you can test your image locally using Docker. @@ -102,7 +102,7 @@ These steps are the bare minimum you need to run your code on Apify. The rest of Most Actors accept an input and produce an output. As part of Actorization, you need to define the input and output structure of your application. -For detailed information, read the docs for [input schema](/platform/actors/development/actor-definition/input-schema), [dataset schema](/platform/actors/development/actor-definition/dataset-schema), and general [storage](/platform/storage). +For detailed information, read the docs for [input schema](/actors/development/actor-definition/input-schema), [dataset schema](/actors/development/actor-definition/dataset-schema), and general [storage](/storage). #### Design guidelines @@ -115,11 +115,11 @@ For detailed information, read the docs for [input schema](/platform/actors/deve ### 3. Handle state persistence (optional) -If your application performs a number of well-defined subtasks, the [request queue](/platform/storage/request-queue) lets you pause and resume execution on job restart. This is important for long-running jobs that might be migrated between servers at some point. In addition, this allows the Apify platform to display the progress to your users in the UI. +If your application performs a number of well-defined subtasks, the [request queue](/storage/request-queue) lets you pause and resume execution on job restart. This is important for long-running jobs that might be migrated between servers at some point. In addition, this allows the Apify platform to display the progress to your users in the UI. A lightweight alternative to the request queue is simply storing the state of your application as a JSON object in the key-value store and checking for that when your Actor is starting. -Fully-fledged Actors will often combine these two approaches for maximum reliability. More on this topic you find in the [state persistence](/platform/actors/development/builds-and-runs/state-persistence) article. +Fully-fledged Actors will often combine these two approaches for maximum reliability. More on this topic you find in the [state persistence](/actors/development/builds-and-runs/state-persistence) article. ### 4. Write Actorization code @@ -129,14 +129,14 @@ Unless you’re writing an application targeted directly on the Apify platform, Apify provides SDKs for [JavaScript](/sdk/js/) and [Python](/sdk/python/) plus the [Apify CLI](/cli/) allowing an easy interaction with the Apify platform from the command line. -Check out [programming interface](/platform/actors/development/programming-interface/) documentation article for details on interacting with the Apify platform in your Actor's code. +Check out [programming interface](/actors/development/programming-interface/) documentation article for details on interacting with the Apify platform in your Actor's code. ### 5. Deploy the Actor -Deployment to the Apify platform can be done easily via `apify push` command of the [Apify CLI](/cli/) and for details see [deployment](/platform/actors/development/deployment) documentation. +Deployment to the Apify platform can be done easily via `apify push` command of the [Apify CLI](/cli/) and for details see [deployment](/actors/development/deployment) documentation. ### 6. Publish and monetize -For details on publishing the Actor in [Apify Store](https://apify.com/store) see the [Publishing and monetization](/platform/actors/publishing). You can also follow the guide on [How to create an Actor README](/academy/actor-marketing-playbook/actor-basics/how-to-create-an-actor-readme) and [Marketing checklist](/academy/actor-marketing-playbook/promote-your-actor/checklist). +For details on publishing the Actor in [Apify Store](https://apify.com/store) see the [Publishing and monetization](/actors/publishing). You can also follow the guide on [How to create an Actor README](/academy/actor-marketing-playbook/actor-basics/how-to-create-an-actor-readme) and [Marketing checklist](/academy/actor-marketing-playbook/promote-your-actor/checklist). -To show your Actor's current status and usage in your README or documentation, add the [Actor status badge](/platform/actors/publishing/status-badge). +To show your Actor's current status and usage in your README or documentation, add the [Actor status badge](/actors/publishing/status-badge). diff --git a/sources/academy/build-and-publish/how-to-build/how_to_create_a_great_input_schema.md b/sources/academy/build-and-publish/how-to-build/how_to_create_a_great_input_schema.md index 51d97247fa..fac04c700b 100644 --- a/sources/academy/build-and-publish/how-to-build/how_to_create_a_great_input_schema.md +++ b/sources/academy/build-and-publish/how-to-build/how_to_create_a_great_input_schema.md @@ -31,7 +31,7 @@ In this article, _we’ll refer to the input schema as the user interface_ of yo :::tip Understand input schemas -To fully understand the recommendations in this blog post, you’ll first need to familiarize yourself with the [technical aspects of the input schema](https://docs.apify.com/platform/actors/development/actor-definition/input-schema). This context is essential to make good use of the insights shared here. +To fully understand the recommendations in this blog post, you’ll first need to familiarize yourself with the [technical aspects of the input schema](https://docs.apify.com/actors/development/actor-definition/input-schema). This context is essential to make good use of the insights shared here. ::: @@ -118,7 +118,7 @@ Unfortunately, when it comes to UX, there's only so much you can achieve armed w - Use them to attract attention or as visual shortcuts. Use emojis consistently to invoke a user's iconic memory. The visual language should match across the whole input schema (and README) so the user can understand what section or field is referred to without reading the whole title. - Don't overload the schema with emojis. They attract attention, so you need to use them sparingly. -:::tip +:::tip Using emojis Read more on the use of emojis: [Actors and emojis](/academy/actor-marketing-playbook/actor-basics/actors-and-emojis) @@ -170,4 +170,4 @@ The version above was the improved input schema. Here's what this tool's input s ## Resources - Basics of input schema: [https://docs.apify.com/academy/deploying-your-code/input-schema](https://docs.apify.com/academy/deploying-your-code/input-schema) -- Specifications of input schema: [https://docs.apify.com/platform/actors/development/actor-definition/input-schema](https://docs.apify.com/platform/actors/development/actor-definition/input-schema) +- Specifications of input schema: [https://docs.apify.com/actors/development/actor-definition/input-schema](https://docs.apify.com/actors/development/actor-definition/input-schema) diff --git a/sources/academy/build-and-publish/how-to-build/running_a_web_server.md b/sources/academy/build-and-publish/how-to-build/running_a_web_server.md index 8a4eaecc86..b1ff2264a1 100644 --- a/sources/academy/build-and-publish/how-to-build/running_a_web_server.md +++ b/sources/academy/build-and-publish/how-to-build/running_a_web_server.md @@ -19,7 +19,7 @@ Running a web server in an Actor is a piece of cake! Each Actor run is available If you start a web server on the port defined by the **APIFY_CONTAINER_PORT** environment variable (the default value is **4321**), the container URL becomes available and gets displayed in the **Live View** tab in the Actor run console. -For more details, see [the documentation](/platform/actors/development/programming-interface/container-web-server). +For more details, see [the documentation](/actors/development/programming-interface/container-web-server). ## Building the Actor {#building-the-actor} diff --git a/sources/academy/build-and-publish/why_publish.md b/sources/academy/build-and-publish/why_publish.md index d7e61a6b21..72c80de41d 100644 --- a/sources/academy/build-and-publish/why_publish.md +++ b/sources/academy/build-and-publish/why_publish.md @@ -58,7 +58,7 @@ Apify Store is a growing library of thousands of Actors, most created by communi ### Maintain quality -Public Actors require higher standards than private ones. Since users depend on your Actor, you'll need to commit to regular maintenance - reserve approximately 2 hours per week for bug fixes, updates, and user support. Thorough documentation is essential; write clear README files using simple language since users may not be developers. Set up automated testing or use manual testing to prevent user issues, and respond promptly to issues through the Issues tab, where your response time is publicly visible. Learn more about metrics determining quality in [Actor quality score documentation](/platform/actors/publishing/quality-score). +Public Actors require higher standards than private ones. Since users depend on your Actor, you'll need to commit to regular maintenance - reserve approximately 2 hours per week for bug fixes, updates, and user support. Thorough documentation is essential; write clear README files using simple language since users may not be developers. Set up automated testing or use manual testing to prevent user issues, and respond promptly to issues through the Issues tab, where your response time is publicly visible. Learn more about metrics determining quality in [Actor quality score documentation](/actors/publishing/quality-score). ### When you need to change things @@ -78,4 +78,4 @@ Learn more: - [How to build Actors](/academy/actor-marketing-playbook/store-basics/how-to-build-actors) - [How Apify Store works](/academy/actor-marketing-playbook/store-basics/how-store-works) -- [Publish your Actor](/platform/actors/publishing/publish) +- [Publish your Actor](/actors/publishing/publish) diff --git a/sources/academy/platform/deploying_your_code/deploying.md b/sources/academy/platform/deploying_your_code/deploying.md index 2f3185affa..4d373cc691 100644 --- a/sources/academy/platform/deploying_your_code/deploying.md +++ b/sources/academy/platform/deploying_your_code/deploying.md @@ -75,4 +75,4 @@ The next step is to test your Actor and experiment with the vast amount of featu ## Wrap up {#next} -That's it! In this short section, you've learned how to take your code written in any programming language and turn it into a usable Actor that can run on the Apify platform! The next step is to start looking into the [paid Actors](/platform/actors/publishing) program, which allows you to monetize your work. +That's it! In this short section, you've learned how to take your code written in any programming language and turn it into a usable Actor that can run on the Apify platform! The next step is to start looking into the [paid Actors](/actors/publishing) program, which allows you to monetize your work. diff --git a/sources/academy/platform/deploying_your_code/index.md b/sources/academy/platform/deploying_your_code/index.md index 7c579aaab6..bdb8334412 100644 --- a/sources/academy/platform/deploying_your_code/index.md +++ b/sources/academy/platform/deploying_your_code/index.md @@ -31,7 +31,7 @@ Here are a few examples of Actors in other languages: Follow these main steps to turn a piece of code into an Actor: 1. Handle [accepting inputs and writing outputs](./inputs_outputs.md). -2. Create the [`.actor` directory](/platform/actors/development/actor-definition) and an `actor.json` configuration file. +2. Create the [`.actor` directory](/actors/development/actor-definition) and an `actor.json` configuration file. 3. Create an [input schema](./input_schema.md) _(optional)_. 4. Add a [Dockerfile](./docker_file.md). 5. [Deploy](./deploying.md) to the Apify platform! diff --git a/sources/academy/platform/deploying_your_code/input_schema.md b/sources/academy/platform/deploying_your_code/input_schema.md index 92664136ea..042273af8c 100644 --- a/sources/academy/platform/deploying_your_code/input_schema.md +++ b/sources/academy/platform/deploying_your_code/input_schema.md @@ -9,7 +9,7 @@ slug: /deploying-your-code/input-schema --- -Writing an [input schema](/platform/actors/development/actor-definition/input-schema) for an Actor is optional, but recommended. The Apify platform reads input schema and generates a user interface for entering input into your Actor, which makes it easier for non-developers and developers alike to configure and understand the inputs your Actor accepts. Because of this, we'll write an input schema for our example Actor. +Writing an [input schema](/actors/development/actor-definition/input-schema) for an Actor is optional, but recommended. The Apify platform reads input schema and generates a user interface for entering input into your Actor, which makes it easier for non-developers and developers alike to configure and understand the inputs your Actor accepts. Because of this, we'll write an input schema for our example Actor. :::note JSON requirement @@ -23,7 +23,7 @@ Inside the `.actor` directory at the root of our project, we'll create `INPUT_SC :::tip Actor configuration directory -Create a `.actor` directory at the root of your project. It holds your Actor's configuration: `actor.json`, `INPUT_SCHEMA.json`, `Dockerfile`, and `README.md`. See [Actor definition](/platform/actors/development/actor-definition) for the full reference. +Create a `.actor` directory at the root of your project. It holds your Actor's configuration: `actor.json`, `INPUT_SCHEMA.json`, `Dockerfile`, and `README.md`. See [Actor definition](/actors/development/actor-definition) for the full reference. ::: @@ -61,7 +61,7 @@ Each property's key corresponds to the name we're expecting within our code, whi ## Property types & editor types {#property-types} -Within our new **numbers** property, there are two more fields we must specify. Firstly, we must let the platform know that we're expecting an array of numbers with the **type** field. Then, we should also instruct Apify on which UI component to render for this input property. In our case, we have an array of numbers, which means we should use the **json** editor type that we discovered in the ["array" section](/platform/actors/development/actor-definition/input-schema/specification/v1#array) of the input schema documentation. We could also use **stringList**, but then we'd have to parse out the numbers from the strings. +Within our new **numbers** property, there are two more fields we must specify. Firstly, we must let the platform know that we're expecting an array of numbers with the **type** field. Then, we should also instruct Apify on which UI component to render for this input property. In our case, we have an array of numbers, which means we should use the **json** editor type that we discovered in the ["array" section](/actors/development/actor-definition/input-schema/specification/v1#array) of the input schema documentation. We could also use **stringList**, but then we'd have to parse out the numbers from the strings. ```json { @@ -112,7 +112,7 @@ Here is what the input schema we wrote will render on the platform: Later on, we'll be building more complex input schemas, as well as discussing how to write quality input schemas that allow the user to understand the Actor. -It's not expected to memorize all of the fields that properties can take or the different editor types available, which is why it's always good to reference the [input schema documentation](/platform/actors/development/actor-definition/input-schema) when writing a schema. +It's not expected to memorize all of the fields that properties can take or the different editor types available, which is why it's always good to reference the [input schema documentation](/actors/development/actor-definition/input-schema) when writing a schema. ## Next up {#next} diff --git a/sources/academy/platform/deploying_your_code/inputs_outputs.md b/sources/academy/platform/deploying_your_code/inputs_outputs.md index 59de298473..fe63ee83c7 100644 --- a/sources/academy/platform/deploying_your_code/inputs_outputs.md +++ b/sources/academy/platform/deploying_your_code/inputs_outputs.md @@ -19,7 +19,7 @@ Understanding inputs and outputs is essential because they are read/written diff ## A bit about storage {#about-storage} -You can read/write your inputs/outputs: to the [key-value store](/platform/storage/key-value-store), or to the [dataset](/platform/storage/dataset). The key-value store can be used to store any sort of unorganized/unrelated data in any format, while the data pushed to a dataset typically resembles a table with columns (fields) and rows (items). Each Actor's run is allocated both a default dataset and a default key-value store. +You can read/write your inputs/outputs: to the [key-value store](/storage/key-value-store), or to the [dataset](/storage/dataset). The key-value store can be used to store any sort of unorganized/unrelated data in any format, while the data pushed to a dataset typically resembles a table with columns (fields) and rows (items). Each Actor's run is allocated both a default dataset and a default key-value store. When running locally, these storages are accessible through the **storage** folder within your project's root directory, while on the platform they are accessible via Apify's API. diff --git a/sources/academy/platform/deploying_your_code/output_schema.md b/sources/academy/platform/deploying_your_code/output_schema.md index ed3c6156ee..31d1fb6495 100644 --- a/sources/academy/platform/deploying_your_code/output_schema.md +++ b/sources/academy/platform/deploying_your_code/output_schema.md @@ -162,7 +162,7 @@ Great! Now that everything is set up, it's time to run the Actor and admire your :::tip Additional resources -Visit the [dataset schema documentation](/platform/actors/development/actor-definition/dataset-schema) for more detailed information about how to implement this feature. +Visit the [dataset schema documentation](/actors/development/actor-definition/dataset-schema) for more detailed information about how to implement this feature. ::: diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index 1ca7b927c8..18cd962a0c 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -32,8 +32,8 @@ Webhooks are a powerful tool that can be used for just about anything. You can s Prior to moving forward, please read over these resources: -- Read about [running Actors, handling Actor inputs, memory and CPU](/platform/actors/running). -- Learn about [Actor webhooks](/platform/integrations/webhooks), which we will implement in the next lesson. +- Read about [running Actors, handling Actor inputs, memory and CPU](/actors/running). +- Learn about [Actor webhooks](/integrations/webhooks), which we will implement in the next lesson. - Learn [how to run Actors](/academy/api/run-actor-and-retrieve-data-via-api) using Apify's REST API. ## Knowledge check 📝 {#quiz} diff --git a/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md b/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md index e5f034e1aa..ccd4f3bbb4 100644 --- a/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md +++ b/sources/academy/platform/expert_scraping_with_apify/bypassing_anti_scraping.md @@ -19,7 +19,7 @@ You might have already noticed that we've been using the **RESIDENTIAL** proxy g ## Learning 🧠 {#learning} - Skim [this page](https://apify.com/proxy) for a general idea of Apify Proxy. -- Give the [proxy documentation](/platform/proxy) a solid readover (feel free to skip most of the examples). +- Give the [proxy documentation](/proxy) a solid readover (feel free to skip most of the examples). - Check out the [anti-scraping guide](../../webscraping/anti_scraping/index.md). - Gain a solid understanding of the [SessionPool](https://crawlee.dev/api/core/class/SessionPool). - Look at a few Actors on the [Apify store](https://apify.com/store). How are they utilizing proxies? diff --git a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md index 6aec1b39f0..47c439209e 100644 --- a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md +++ b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md @@ -16,7 +16,7 @@ In this brief lesson, we'll discuss how to better manage an Actor's source code. Thus far, every time we've updated our code on the Apify platform, we've used the `apify push` CLI command; however, this can be problematic for a few reasons - mainly because, if someone else wants to make a change to/maintain your code, they don't have access to it, as it is on your local machine. -If you're not yet familiar with Git, please get familiar with it through the [Git documentation](https://git-scm.com/docs), then take a quick moment to read about [GitHub integration](/platform/integrations/github) in the Apify docs. +If you're not yet familiar with Git, please get familiar with it through the [Git documentation](https://git-scm.com/docs), then take a quick moment to read about [GitHub integration](/integrations/github) in the Apify docs. Also, try to explore the **Multifile editor** in one of the Actors you developed in the previous lessons before moving forward. diff --git a/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md b/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md index 707e64fd7d..cf5d05baa1 100644 --- a/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md +++ b/sources/academy/platform/expert_scraping_with_apify/migrations_maintaining_state.md @@ -18,14 +18,14 @@ When a migration happens, you want to do a so-called "state transition", which m ## Learning 🧠 {#learning} -Read this [article](/platform/actors/development/builds-and-runs/state-persistence) on migrations and dealing with state transitions. +Read this [article](/actors/development/builds-and-runs/state-persistence) on migrations and dealing with state transitions. Before moving forward, read about Actor [events](/sdk/js/docs/upgrading/upgrading-to-v3#events) and how to listen for them. ## Knowledge check 📝 {#quiz} 1. Actors have an option in the **Settings** tab to **Restart on error**. Would you use this feature for regular Actors? When would you use this feature? -2. Migrations happen randomly, but by [aborting **gracefully**](/platform/actors/running/runs-and-builds#aborting-runs), you can simulate a similar situation. Try this out on the platform and observe what happens. What changes occur, and what remains the same for the restarted Actor's run? +2. Migrations happen randomly, but by [aborting **gracefully**](/actors/running/runs-and-builds#aborting-runs), you can simulate a similar situation. Try this out on the platform and observe what happens. What changes occur, and what remains the same for the restarted Actor's run? 3. Why don't you (usually) need to add any special migration handling code for a standard crawling/scraping Actor? Are there any features in the Crawlee/Apify SDK that handle this under the hood? 4. How can you intercept the migration event? How much time do you have after this event happens and before the Actor migrates? 5. When would you persist data to the default key-value store instead of to a named key-value store? diff --git a/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md b/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md index 24399f8df6..2628ff0914 100644 --- a/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md +++ b/sources/academy/platform/expert_scraping_with_apify/solutions/handling_migrations.md @@ -230,7 +230,7 @@ That's everything! Now, even if the Actor migrates (or is gracefully aborted and **A:** It's not best to use this option by default. If it fails, there must be a reason, which would need to be thought through first - meaning that the edge case of failing should be handled when resurrecting the Actor. The state should be persisted beforehand. -**Q: Migrations happen randomly, but by [aborting gracefully](/platform/actors/running/runs-and-builds#aborting-runs), you can simulate a similar situation. Try this out on the platform and observe what happens. What changes occur, and what remains the same for the restarted Actor's run?** +**Q: Migrations happen randomly, but by [aborting gracefully](/actors/running/runs-and-builds#aborting-runs), you can simulate a similar situation. Try this out on the platform and observe what happens. What changes occur, and what remains the same for the restarted Actor's run?** **A:** After aborting or throwing an error mid-process, it manages to start back from where it was upon resurrection. diff --git a/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md b/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md index 17e31cf6cb..cf6dc6ae5c 100644 --- a/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md +++ b/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md @@ -22,9 +22,9 @@ Storage allows us to save persistent data for further processing. As you'll lear ## Learning 🧠 {#learning} -- Check out [the docs about Actor tasks](/platform/actors/running/tasks). -- Read about the [two main storage options](/platform/storage/dataset) on the Apify platform. -- Understand the [differences between named and unnamed storages](/platform/storage#named-and-unnamed-storages). +- Check out [the docs about Actor tasks](/actors/running/tasks). +- Read about the [two main storage options](/storage/dataset) on the Apify platform. +- Understand the [differences between named and unnamed storages](/storage#named-and-unnamed-storages). - Learn about the [`Dataset`](/sdk/js/reference/class/Dataset) and [`KeyValueStore`](/sdk/js/reference/class/KeyValueStore) objects in the Apify SDK. ## Knowledge check 📝 {#quiz} diff --git a/sources/academy/platform/getting_started/creating_actors.md b/sources/academy/platform/getting_started/creating_actors.md index cb208178a2..0ba7bb10fa 100644 --- a/sources/academy/platform/getting_started/creating_actors.md +++ b/sources/academy/platform/getting_started/creating_actors.md @@ -22,7 +22,7 @@ You have two options: ## Create Actor from existing source code {#existing-source-code} -If you already have your code hosted by a Git provider, you can use it to create an Actor by linking the repository. If you use GitHub, you can use the [GitHub integration](/platform/integrations/github) to create an Actor from your public or private repository. You can also use GitLab, Bitbucket or other Git providers or external repositories. To see all available options, select **Import from Git**. +If you already have your code hosted by a Git provider, you can use it to create an Actor by linking the repository. If you use GitHub, you can use the [GitHub integration](/integrations/github) to create an Actor from your public or private repository. You can also use GitLab, Bitbucket or other Git providers or external repositories. To see all available options, select **Import from Git**. You can also push your existing code from your local machine using [Apify CLI](/cli). This option is useful when you develop your code locally and then you want to push it to Apify Console to run the code as an Actor in the cloud. For details, see [Quick start](/cli/docs/quick-start) in the Apify CLI docs. @@ -38,7 +38,7 @@ You will end up on a template detail page where you can see all the important in ### Use templates in Web IDE {#web-ide} -By clicking **Use this template** button you will create the Actor in Apify Console and you will be moved to the **Code** tab with the [Web IDE](/platform/actors/development/quick-start/web-ide) where you can see the code of the template and start editing it. +By clicking **Use this template** button you will create the Actor in Apify Console and you will be moved to the **Code** tab with the [Web IDE](/get-started/web-ide) where you can see the code of the template and start editing it. :::tip Web IDE @@ -125,7 +125,7 @@ The Actor takes the `url` from the input and then: 3. Extracts headings (H1 - H6) from the page. 4. Stores the extracted data. -The extracted data is stored in the [Dataset](/platform/storage/dataset) where you can preview it and download it. We'll show how to do that later in [Run the Actor](#run-the-actor) section. +The extracted data is stored in the [Dataset](/storage/dataset) where you can preview it and download it. We'll show how to do that later in [Run the Actor](#run-the-actor) section. :::tip Customize template @@ -139,7 +139,7 @@ Learn more about the Actor input and output [in the next page](/academy/getting- ## Build the Actor -In order to run the Actor, you need to [build](/platform/actors/development/builds-and-runs/builds) it first. Click on the **Build** button at the bottom of the page or **Build now** button right under the code editor. +In order to run the Actor, you need to [build](/actors/development/builds-and-runs/builds) it first. Click on the **Build** button at the bottom of the page or **Build now** button right under the code editor. ![Build the Actor](./images/build-actor.png) diff --git a/sources/academy/platform/getting_started/inputs_outputs.md b/sources/academy/platform/getting_started/inputs_outputs.md index 9555afe4a0..08998b1b58 100644 --- a/sources/academy/platform/getting_started/inputs_outputs.md +++ b/sources/academy/platform/getting_started/inputs_outputs.md @@ -69,7 +69,7 @@ This step isn't necessary, as the Actor will still be able to take input in JSON :::tip Learn more -If you're interested in learning more about how the code works, and what the `INPUT_SCHEMA.json` means, read about [inputs](/sdk/js/docs/examples/accept-user-input) and [adding data to a dataset](/sdk/js/docs/examples/add-data-to-dataset) in the Apify SDK documentation, and refer to the [input schema docs](/platform/actors/development/actor-definition/input-schema/specification/v1#integer). +If you're interested in learning more about how the code works, and what the `INPUT_SCHEMA.json` means, read about [inputs](/sdk/js/docs/examples/accept-user-input) and [adding data to a dataset](/sdk/js/docs/examples/add-data-to-dataset) in the Apify SDK documentation, and refer to the [input schema docs](/actors/development/actor-definition/input-schema/specification/v1#integer). ::: @@ -96,7 +96,7 @@ On the results tab, there are a whole lot of options for which format to view/do There's our solution! Did it work for you as well? Now, we can download the data right from the Dataset tab to be used elsewhere, or even programmatically retrieve it by using [Apify's API](/api/v2) (we'll be discussing how to do this in the next lesson). -It's important to note that the default dataset of the Actor, which we pushed our solution to, will be retained for 7 days. If we wanted the data to be retained for an indefinite period of time, we'd have to use a named dataset. For more information about named storages vs unnamed storages, read a bit about [data retention on the Apify platform](/platform/storage#data-retention). +It's important to note that the default dataset of the Actor, which we pushed our solution to, will be retained for 7 days. If we wanted the data to be retained for an indefinite period of time, we'd have to use a named dataset. For more information about named storages vs unnamed storages, read a bit about [data retention on the Apify platform](/storage#data-retention). ## Next up {#next} diff --git a/sources/academy/platform/scraping_with_apify_and_ai/01_developing_scraper_ai_chat.md b/sources/academy/platform/scraping_with_apify_and_ai/01_developing_scraper_ai_chat.md index 621cf1fb05..9590084b84 100644 --- a/sources/academy/platform/scraping_with_apify_and_ai/01_developing_scraper_ai_chat.md +++ b/sources/academy/platform/scraping_with_apify_and_ai/01_developing_scraper_ai_chat.md @@ -186,7 +186,7 @@ If you're still stuck, open a clean new chat in ChatGPT and try the same prompt Despite a few flaws, we've successfully created our first working prototype of a price-watching app with no coding knowledge. -And thanks to Apify, our scraper can [run automatically on a weekly basis](https://docs.apify.com/platform/schedules), we have its output [ready to download in a variety of formats](https://docs.apify.com/platform/storage/dataset), we can [monitor its runs](https://docs.apify.com/platform/monitoring), and we can [work around anti-scraping measures](https://docs.apify.com/platform/proxy). +And thanks to Apify, our scraper can [run automatically on a weekly basis](https://docs.apify.com/actors/running/schedules), we have its output [ready to download in a variety of formats](https://docs.apify.com/storage/dataset), we can [monitor its runs](https://docs.apify.com/actors/running/monitoring), and we can [work around anti-scraping measures](https://docs.apify.com/proxy). To improve our project further, we'd copy the code, ask ChatGPT to refine it, paste it back into the Web IDE, and rebuild. diff --git a/sources/academy/platform/scraping_with_apify_and_ai/02_developing_scraper_ai_agent.md b/sources/academy/platform/scraping_with_apify_and_ai/02_developing_scraper_ai_agent.md index f466c22349..c43ee378cb 100644 --- a/sources/academy/platform/scraping_with_apify_and_ai/02_developing_scraper_ai_agent.md +++ b/sources/academy/platform/scraping_with_apify_and_ai/02_developing_scraper_ai_agent.md @@ -307,7 +307,7 @@ We've done it, the prices save as numbers! :::tip Specifying output schema -If we didn't want to always click on **All fields** to see full items, we need to specify an [output schema](https://docs.apify.com/platform/actors/development/actor-definition/output-schema) so that the platform knows what it can expect and how it should display it in the interface. With Cursor, such change is just a single prompt away: +If we didn't want to always click on **All fields** to see full items, we need to specify an [output schema](https://docs.apify.com/actors/development/actor-definition/output-schema) so that the platform knows what it can expect and how it should display it in the interface. With Cursor, such change is just a single prompt away: ```text Change the output schema of the Actor diff --git a/sources/academy/tutorials/api/index.md b/sources/academy/tutorials/api/index.md index 4cd998bdd9..9fe065de62 100644 --- a/sources/academy/tutorials/api/index.md +++ b/sources/academy/tutorials/api/index.md @@ -10,7 +10,7 @@ slug: /api --- -This section explains how you can run [Apify Actors](/platform/actors) using Apify's [API](/api/v2), retrieve their results, and integrate them into your own product and workflows. You can do this using a raw HTTP client, or you can benefit from using one of our API clients for: +This section explains how you can run [Apify Actors](/actors) using Apify's [API](/api/v2), retrieve their results, and integrate them into your own product and workflows. You can do this using a raw HTTP client, or you can benefit from using one of our API clients for: - [JavaScript](/api/client/js/) - [Python](/api/client/python) diff --git a/sources/academy/tutorials/api/run_actor_and_retrieve_data_via_api.md b/sources/academy/tutorials/api/run_actor_and_retrieve_data_via_api.md index 06ba1119d0..48df68945d 100644 --- a/sources/academy/tutorials/api/run_actor_and_retrieve_data_via_api.md +++ b/sources/academy/tutorials/api/run_actor_and_retrieve_data_via_api.md @@ -11,7 +11,7 @@ slug: /api/run-actor-and-retrieve-data-via-api import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -The most popular way of [integrating](https://help.apify.com/en/collections/1669769-integrations) the Apify platform with an external project/application is by programmatically running an [Actor](/platform/actors) or [task](/platform/actors/running/tasks), waiting for it to complete its run, then collecting its data and using it within the project. Follow this tutorial to have an idea on how to approach this, it isn't as complicated as it sounds! +The most popular way of [integrating](https://help.apify.com/en/collections/1669769-integrations) the Apify platform with an external project/application is by programmatically running an [Actor](/actors) or [task](/actors/running/tasks), waiting for it to complete its run, then collecting its data and using it within the project. Follow this tutorial to have an idea on how to approach this, it isn't as complicated as it sounds! > Remember to check out our [API documentation](/api/v2) with examples in different languages and a live API console. We also recommend testing the API with a desktop client like [Postman](https://www.postman.com/) or [Insomnia](https://insomnia.rest). @@ -25,7 +25,7 @@ If the Actor being run via API takes 5 minutes or less to complete a typical run ## Run an Actor or task {#run-an-actor-or-task} -> If you are unsure about the differences between an Actor and a task, you can read about them in the [tasks](/platform/actors/running/tasks) documentation. In brief, tasks are pre-configured inputs for Actors. +> If you are unsure about the differences between an Actor and a task, you can read about them in the [tasks](/actors/running/tasks) documentation. In brief, tasks are pre-configured inputs for Actors. The API endpoints and usage (for both sync and async) for [Actors](/api/v2#tag/ActorsRun-collection/operation/act_runs_post) and [tasks](/api/v2/actor-task-runs-post) are essentially the same. @@ -33,7 +33,7 @@ To run, or **call**, an Actor/task, you will need a few things: - The name or ID of the Actor/task. The name looks like `username~actorName` or `username~taskName`. The ID can be retrieved on the **Settings** page of the Actor/task. -- Your [API token](/platform/integrations), which you can find on the **API & Integrations** page in [Apify Console](https://console.apify.com/settings/integrations) (do not share it with anyone!). +- Your [API token](/integrations), which you can find on the **API & Integrations** page in [Apify Console](https://console.apify.com/settings/integrations) (do not share it with anyone!). - Possibly an input, which is passed in JSON format as the request's **body**. @@ -61,7 +61,7 @@ We can also add settings for the Actor (which will override the default settings https://api.apify.com/v2/actors/ACTOR_NAME_OR_ID/runs?token=YOUR_TOKEN&memory=8192&build=beta ``` -This works in almost exactly the same way for both Actors and tasks; however, for tasks, there is no reason to specify a [`build`](/platform/actors/development/builds-and-runs/builds) parameter, as a task already has only one specific Actor build which cannot be changed with query parameters. +This works in almost exactly the same way for both Actors and tasks; however, for tasks, there is no reason to specify a [`build`](/actors/development/builds-and-runs/builds) parameter, as a task already has only one specific Actor build which cannot be changed with query parameters. ### Input JSON {#input-json} @@ -149,7 +149,7 @@ If your synchronous run exceeds the 5-minute time limit, the response will be a ### Synchronous runs with dataset output {#synchronous-runs-with-dataset-output} -Most Actor runs will store their data in the default [dataset](/platform/storage/dataset). The Apify API provides **run-sync-get-dataset-items** endpoints for [Actors](/api/v2/act-run-sync-get-dataset-items-post) and [tasks](/api/v2/actor-task-run-sync-get-dataset-items-post), which allow you to run an Actor and receive the items from the default dataset once the run has finished. +Most Actor runs will store their data in the default [dataset](/storage/dataset). The Apify API provides **run-sync-get-dataset-items** endpoints for [Actors](/api/v2/act-run-sync-get-dataset-items-post) and [tasks](/api/v2/actor-task-run-sync-get-dataset-items-post), which allow you to run an Actor and receive the items from the default dataset once the run has finished. Here is a Node.js example of calling a task via the API and logging the dataset items to the console: @@ -186,7 +186,7 @@ items.forEach((item) => { ### Synchronous runs with key-value store output {#synchronous-runs-with-key-value-store-output} -[Key-value stores](/platform/storage/key-value-store) are useful for storing files like images, HTML snapshots, or JSON data. The Apify API provides **run-sync** endpoints for [Actors](/api/v2/act-run-sync-post) and [tasks](/api/v2/actor-task-run-sync-post), which allow you to run a specific task and receive the output. By default, they return the `OUTPUT` record from the default key-value store. +[Key-value stores](/storage/key-value-store) are useful for storing files like images, HTML snapshots, or JSON data. The Apify API provides **run-sync** endpoints for [Actors](/api/v2/act-run-sync-post) and [tasks](/api/v2/actor-task-run-sync-post), which allow you to run a specific task and receive the output. By default, they return the `OUTPUT` record from the default key-value store. ## Asynchronous flow {#asynchronous-flow} @@ -218,13 +218,13 @@ Once again, the final response will be the **run info object**; however, now its #### Webhooks {#webhooks} -If you have a server, [webhooks](/platform/integrations/webhooks) are the most elegant and flexible solution for integrations with Apify. You can set up a webhook for any Actor or task, and that webhook will send a POST request to your server after an [event](/platform/integrations/webhooks/events) has occurred. +If you have a server, [webhooks](/integrations/webhooks) are the most elegant and flexible solution for integrations with Apify. You can set up a webhook for any Actor or task, and that webhook will send a POST request to your server after an [event](/integrations/webhooks/events) has occurred. Usually, this event is a successfully finished run, but you can also set a different webhook for failed runs, etc. ![Webhook example](./images/webhook.png) -The webhook will send you a pretty complicated [JSON object](/platform/integrations/webhooks/actions), but usually, you would only be interested in the `resource` object within the response, which is like the **run info** JSON from the previous sections. We can leave the payload template as is for our example since it is all we need. +The webhook will send you a pretty complicated [JSON object](/integrations/webhooks/actions), but usually, you would only be interested in the `resource` object within the response, which is like the **run info** JSON from the previous sections. We can leave the payload template as is for our example since it is all we need. Once your server receives this request from the webhook, you know that the event happened, and you can ask for the complete data. @@ -248,11 +248,11 @@ Once a status of `SUCCEEDED` or `FAILED` has been received, we know the run has Unless you used the [synchronous call](#synchronous-flow) mentioned above, you will have to make one additional request to the API to retrieve the data. -The **run info** JSON also contains the IDs of the default [dataset](/platform/storage/dataset) and [key-value store](/platform/storage/key-value-store) that are allocated separately for each run, which is usually everything you need. The fields are called `defaultDatasetId` and `defaultKeyValueStoreId`. +The **run info** JSON also contains the IDs of the default [dataset](/storage/dataset) and [key-value store](/storage/key-value-store) that are allocated separately for each run, which is usually everything you need. The fields are called `defaultDatasetId` and `defaultKeyValueStoreId`. #### Retrieving a dataset {#retrieve-a-dataset} -> If you are scraping products, or any list of items with similar fields, the [dataset](/platform/storage/dataset) should be your storage of choice. Don't forget though, that dataset items are immutable. This means that you can only add to the dataset, and not change the content that is already inside it. +> If you are scraping products, or any list of items with similar fields, the [dataset](/storage/dataset) should be your storage of choice. Don't forget though, that dataset items are immutable. This means that you can only add to the dataset, and not change the content that is already inside it. To retrieve the data from a dataset, send a GET request to the [**Get dataset items**](/api/v2/dataset-items-get) endpoint and pass the `defaultDatasetId` into the URL. For a GET request to the default dataset, no token is needed. @@ -272,7 +272,7 @@ https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&offset=250000 #### Retrieving a key-value store {#retrieve-a-key-value-store} -> [Key-value stores](/platform/storage/key-value-store) are mainly useful if you have a single output or any kind of files that cannot be [stringified](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) (such as images or PDFs). +> [Key-value stores](/storage/key-value-store) are mainly useful if you have a single output or any kind of files that cannot be [stringified](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) (such as images or PDFs). When you want to retrieve something from a key-value store, the `defaultKeyValueStoreId` is _not_ enough. You also need to know the name (or **key**) of the record you want to retrieve. diff --git a/sources/academy/tutorials/api/using_apify_from_php.md b/sources/academy/tutorials/api/using_apify_from_php.md index f491f86827..f5959ddc1a 100644 --- a/sources/academy/tutorials/api/using_apify_from_php.md +++ b/sources/academy/tutorials/api/using_apify_from_php.md @@ -79,7 +79,7 @@ $data = $parsedResponse['data']; echo \json_encode($data, JSON_PRETTY_PRINT); ``` -You should see information about the run, including its ID and the ID of its default [dataset](/platform/storage/dataset). Take note of these, we will need them later. +You should see information about the run, including its ID and the ID of its default [dataset](/storage/dataset). Take note of these, we will need them later. ## Getting the results from dataset @@ -125,7 +125,7 @@ All the available parameters are described in [our API reference](/api/v2/datase ## Getting the results from key-value stores -Datasets are great for structured data, but are not suited for binary files like images or PDFs. In these cases, Actors store their output in [key-value stores](/platform/storage/key-value-store). One such Actor is the **HTML String To PDF** ([mhamas/html-string-to-pdf](https://apify.com/mhamas/html-string-to-pdf)) converter. Let's run it. +Datasets are great for structured data, but are not suited for binary files like images or PDFs. In these cases, Actors store their output in [key-value stores](/storage/key-value-store). One such Actor is the **HTML String To PDF** ([mhamas/html-string-to-pdf](https://apify.com/mhamas/html-string-to-pdf)) converter. Let's run it. ```php $response = $client->post('acts/mhamas~html-string-to-pdf/runs', [ @@ -202,7 +202,7 @@ file_put_contents(__DIR__ . '/hi-world.pdf', $response->getBody()); ## Webhooks -For Actors that take longer to run, we can use [webhooks](/platform/integrations/webhooks). A webhook is an HTML POST request that is sent to a specified URL when an Actor's status changes. We can use them as a kind of notification that is sent when your run finishes. You can set them up using query parameters. If we used webhooks in the example above, it would look like this: +For Actors that take longer to run, we can use [webhooks](/integrations/webhooks). A webhook is an HTML POST request that is sent to a specified URL when an Actor's status changes. We can use them as a kind of notification that is sent when your run finishes. You can set them up using query parameters. If we used webhooks in the example above, it would look like this: ```php // Webhooks need to be passed as a base64-encoded JSON string @@ -227,7 +227,7 @@ $response = $client->post('acts/mhamas~html-string-to-pdf/runs', [ ## How to use Apify Proxy -Let's use another important feature: [proxy](/platform/proxy). If you want to make sure that your server's IP address won't get blocked somewhere when making requests, you can use the automatic proxy selection mode. +Let's use another important feature: [proxy](/proxy). If you want to make sure that your server's IP address won't get blocked somewhere when making requests, you can use the automatic proxy selection mode. ```php $client = new \GuzzleHttp\Client([ @@ -258,7 +258,7 @@ $response = $client->get("https://api.apify.com/v2/browser-info"); echo $response->getBody(); ``` -[See the proxy docs](/platform/proxy) for more details on using specific proxies. +[See the proxy docs](/proxy) for more details on using specific proxies. ## Feedback diff --git a/sources/academy/tutorials/apify_actors/adding_rapidapi_project.md b/sources/academy/tutorials/apify_actors/adding_rapidapi_project.md index fa2f8ea595..41bda37656 100644 --- a/sources/academy/tutorials/apify_actors/adding_rapidapi_project.md +++ b/sources/academy/tutorials/apify_actors/adding_rapidapi_project.md @@ -120,7 +120,7 @@ Once you’ve saved the settings, go to the **Standby** tab, and click the **Tes Ready to monetize your Actor and start earning? Check out these guides: -- [Set up monetization for your Actor](https://docs.apify.com/platform/actors/publishing/monetize) -- [Publish your Actor on Apify Store](https://docs.apify.com/platform/actors/publishing/publish) +- [Set up monetization for your Actor](https://docs.apify.com/actors/publishing/monetize) +- [Publish your Actor on Apify Store](https://docs.apify.com/actors/publishing/publish) You can also extend your Actor with custom logic and leverage additional Apify platform features, such as storage or web scraping capabilities. diff --git a/sources/academy/tutorials/apify_scrapers/cheerio_scraper.md b/sources/academy/tutorials/apify_scrapers/cheerio_scraper.md index 586a835b40..eb685aee07 100644 --- a/sources/academy/tutorials/apify_scrapers/cheerio_scraper.md +++ b/sources/academy/tutorials/apify_scrapers/cheerio_scraper.md @@ -502,7 +502,7 @@ Thank you for reading this whole tutorial! Really! It's important to us that our ## What's next * Check out the [Apify SDK](https://docs.apify.com/sdk) and its [Getting started](https://docs.apify.com/sdk/js/docs/guides/apify-platform) tutorial if you'd like to try building your own Actors. It's a bit more complex and involved than writing a `pageFunction`, but it allows you to fine-tune all the details of your scraper to your liking. -* [Take a deep dive into Actors](/platform/actors), from how they work to [publishing](/platform/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. +* [Take a deep dive into Actors](/actors), from how they work to [publishing](/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. * Found out you're not into the coding part but would still to use Apify Actors? Check out our [ready-made solutions](https://apify.com/store) or [order a custom Actor](https://apify.com/contact-sales) from an Apify-certified developer. diff --git a/sources/academy/tutorials/apify_scrapers/getting_started.md b/sources/academy/tutorials/apify_scrapers/getting_started.md index 9b05130eba..061b969822 100644 --- a/sources/academy/tutorials/apify_scrapers/getting_started.md +++ b/sources/academy/tutorials/apify_scrapers/getting_started.md @@ -17,7 +17,7 @@ Welcome to the getting started tutorial! It will walk you through creating your It doesn't matter whether you arrived here from **Web Scraper** ([apify/web-scraper](https://apify.com/apify/web-scraper)), **Puppeteer Scraper** ([apify/puppeteer-scraper](https://apify.com/apify/puppeteer-scraper)) or **Cheerio Scraper** ([apify/cheerio-scraper](https://apify.com/apify/cheerio-scraper)). All of them are **Actors** and for now, let's think of an **Actor** as an application that you can use with your own configuration. **apify/web-scraper** is therefore an application called **web-scraper**, built by **apify**, that you can configure to scrape any webpage. We call these configurations **tasks**. -> If you need help choosing the right scraper, see this [great article](https://help.apify.com/en/articles/3024655-choosing-the-right-solution). If you want to learn more about Actors in general, you can read our [Actors page](https://apify.com/actors) or [browse the documentation](/platform/actors). +> If you need help choosing the right scraper, see this [great article](https://help.apify.com/en/articles/3024655-choosing-the-right-solution). If you want to learn more about Actors in general, you can read our [Actors page](https://apify.com/actors) or [browse the documentation](/actors). You can create 10 different **tasks** for 10 different websites, with very different options, but there will always be just one **Actor**, the `apify/*-scraper` you chose. This is the essence of tasks. They are nothing but **saved configurations** of the Actor that you can run repeatedly. @@ -35,7 +35,7 @@ This takes you to the **Input and options** tab of the task configuration. Befor Scroll down to the **Performance and limits** section and set the **Max pages per run** option to **10**. This tells your task to finish after 10 pages have been visited. We don't need to crawl the whole domain to see that the Actor works. -> This also helps with keeping your [compute unit](/platform/actors/running/usage-and-resources) (CU) consumption low. To get an idea, our free plan includes 10 CUs and this run will consume about 0.04 CU, so you can run it 250 times a month for free. If you accidentally go over the limit, no worries, we won't charge you for it. You just won't be able to run more tasks that month. +> This also helps with keeping your [compute unit](/actors/running/usage-and-resources) (CU) consumption low. To get an idea, our free plan includes 10 CUs and this run will consume about 0.04 CU, so you can run it 250 times a month for free. If you accidentally go over the limit, no worries, we won't charge you for it. You just won't be able to run more tasks that month. Now click **Save & Run**! *(in the bottom-left part of your screen)* @@ -77,7 +77,7 @@ You can find all the task runs and their detail pages here. Every time you start ### Webhooks -Webhooks are a feature that help keep you aware of what's happening with your tasks. You can set them up to inform you when a task starts, finishes, fails etc., or you can even use them to run more tasks, depending on the outcome of the original one. [See webhooks documentation](/platform/integrations/webhooks). +Webhooks are a feature that help keep you aware of what's happening with your tasks. You can set them up to inform you when a task starts, finishes, fails etc., or you can even use them to run more tasks, depending on the outcome of the original one. [See webhooks documentation](/integrations/webhooks). ### Information @@ -254,7 +254,7 @@ When a **Pseudo URL** is set, the scraper attempts to enqueue matching links on The `pageFunction` may only return nothing, `null`, `Object` or `Object[]`. If an `Object` is returned, it will be saved as a single result. Returning an `Array` of `Objects` will save each item in the array as a result. -The scraping results are saved in a [dataset](/platform/storage/dataset) (one of the tabs in the run console, as you may remember). It behaves like a table. Each item is a row in the table and its properties are its columns. Returning the following `Object`: +The scraping results are saved in a [dataset](/storage/dataset) (one of the tabs in the run console, as you may remember). It behaves like a table. Each item is a row in the table and its properties are its columns. Returning the following `Object`: ```js async function pageFunction(context) { diff --git a/sources/academy/tutorials/apify_scrapers/puppeteer_scraper.md b/sources/academy/tutorials/apify_scrapers/puppeteer_scraper.md index 130713691a..16067dbb52 100644 --- a/sources/academy/tutorials/apify_scrapers/puppeteer_scraper.md +++ b/sources/academy/tutorials/apify_scrapers/puppeteer_scraper.md @@ -822,7 +822,7 @@ Thank you for reading this whole tutorial! Really! It's important to us that our ## What's next - Check out the [Apify SDK](https://docs.apify.com/sdk) and its [Getting started](https://docs.apify.com/sdk/js/docs/guides/apify-platform) tutorial if you'd like to try building your own Actors. It's a bit more complex and involved than writing a `pageFunction`, but it allows you to fine-tune all the details of your scraper to your liking. -- [Take a deep dive into Actors](/platform/actors), from how they work to [publishing](/platform/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. +- [Take a deep dive into Actors](/actors), from how they work to [publishing](/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. - Found out you're not into the coding part but would still to use Apify Actors? Check out our [ready-made solutions](https://apify.com/store) or [order a custom Actor](https://apify.com/contact-sales) from an Apify-certified developer. diff --git a/sources/academy/tutorials/apify_scrapers/web_scraper.md b/sources/academy/tutorials/apify_scrapers/web_scraper.md index 3b468e198f..7bdeb0fb75 100644 --- a/sources/academy/tutorials/apify_scrapers/web_scraper.md +++ b/sources/academy/tutorials/apify_scrapers/web_scraper.md @@ -556,7 +556,7 @@ Thank you for reading this whole tutorial! Really! It's important to us that our ## What's next - Check out the [Apify SDK](https://docs.apify.com/sdk) and its [Getting started](https://docs.apify.com/sdk/js/docs/guides/apify-platform) tutorial if you'd like to try building your own Actors. It's a bit more complex and involved than writing a `pageFunction`, but it allows you to fine-tune all the details of your scraper to your liking. -- [Take a deep dive into Actors](/platform/actors), from how they work to [publishing](/platform/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. +- [Take a deep dive into Actors](/actors), from how they work to [publishing](/actors/publishing) them in Apify Store, and even [making money](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/) on Actors. - Found out you're not into the coding part but would still to use Apify Actors? Check out our [ready-made solutions](https://apify.com/store) or [order a custom Actor](https://apify.com/contact-sales) from an Apify-certified developer. diff --git a/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md b/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md index d653a6affd..baabdb545a 100644 --- a/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md +++ b/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md @@ -123,7 +123,7 @@ Logging and snapshotting are great tools but once you reach a certain run size, ## With the Apify SDK {#with-the-apify-sdk} -This example extends our snapshot solution above by creating a [named dataset](/platform/storage#named-and-unnamed-storages) (named datasets have infinite retention), where we will accumulate error reports. Those reports will explain what happened and will link to a saved snapshot, so we can do a quick visual check. +This example extends our snapshot solution above by creating a [named dataset](/storage#named-and-unnamed-storages) (named datasets have infinite retention), where we will accumulate error reports. Those reports will explain what happened and will link to a saved snapshot, so we can do a quick visual check. ```js import { Actor } from 'apify'; diff --git a/sources/academy/tutorials/node_js/apify_free_google_serp_api.md b/sources/academy/tutorials/node_js/apify_free_google_serp_api.md index ceafc6177a..2888b054bf 100644 --- a/sources/academy/tutorials/node_js/apify_free_google_serp_api.md +++ b/sources/academy/tutorials/node_js/apify_free_google_serp_api.md @@ -10,7 +10,7 @@ You need to regularly grab SERP data about your target keywords? Apify provides ![Apify Google SERP API](./images/gserp-api.png) -Hit `Save & Run` and you'll have the downloaded data as soon as the query finishes. To have it run at a regular frequency, you can set up the task to run on an [automatic schedule](/platform/schedules#setting-up-a-new-schedule). +Hit `Save & Run` and you'll have the downloaded data as soon as the query finishes. To have it run at a regular frequency, you can set up the task to run on an [automatic schedule](/actors/running/schedules#setting-up-a-new-schedule). To run from the API, send a [synchronous POST request](/api/v2/actor-task-run-sync-get-dataset-items-post) to an endpoint such as `https://api.apify.com/v2/actors/TASK_NAME_OR_ID/runs?token=YOUR_TOKEN`. Include any required input in a JSON object in the request's body. diff --git a/sources/academy/tutorials/node_js/filter_blocked_requests_using_sessions.md b/sources/academy/tutorials/node_js/filter_blocked_requests_using_sessions.md index 13fcdb4f4c..c9c4131268 100644 --- a/sources/academy/tutorials/node_js/filter_blocked_requests_using_sessions.md +++ b/sources/academy/tutorials/node_js/filter_blocked_requests_using_sessions.md @@ -21,13 +21,13 @@ You want to crawl a website with a proxy pool, but most of your proxies are bloc 5. The proxies actually got banned before anyone used them to crawl the website because they use anti-bot protection that bans proxies across websites (e.g. Cloudflare). -Nobody can make sure that a proxy will work infinitely. The only real solution to this problem is to use [residential proxies](/platform/proxy/residential-proxy), but they can sometimes be too costly. +Nobody can make sure that a proxy will work infinitely. The only real solution to this problem is to use [residential proxies](/proxy/residential-proxy), but they can sometimes be too costly. However, usually, at least some of our proxies work. To crawl successfully, it is therefore imperative to handle blocked requests properly. You first need to discover that you are blocked, which usually means that either your request returned status greater or equal to 400 (it didn't return the proper response) or that the page displayed a captcha. To ensure that this bad request is retried, you usually throw an error and it gets automatically retried later (our [SDK](/sdk/js/) handles this for you). Check out [this article](https://docs.apify.com/academy/node-js/handle-blocked-requests-puppeteer) as inspiration for how to handle this situation with `PuppeteerCrawler` class. ## Solution -Now we are able to retry bad requests and eventually unless all of our proxies get banned, we should be able to successfully crawl what we want. The problem is that it takes too long and our log is full of errors. Fortunately, we can overcome this with [proxy sessions](/platform/proxy/datacenter-proxy#username-parameters) (look at the proxy and SDK documentation for how to use them in your Actors.) +Now we are able to retry bad requests and eventually unless all of our proxies get banned, we should be able to successfully crawl what we want. The problem is that it takes too long and our log is full of errors. Fortunately, we can overcome this with [proxy sessions](/proxy/datacenter-proxy#username-parameters) (look at the proxy and SDK documentation for how to use them in your Actors.) First we define `sessions`  object at the top of our code (in global scope) to hold the state of our working sessions. diff --git a/sources/academy/tutorials/node_js/handle_blocked_requests_puppeteer.md b/sources/academy/tutorials/node_js/handle_blocked_requests_puppeteer.md index e762716b0b..fb6402e588 100644 --- a/sources/academy/tutorials/node_js/handle_blocked_requests_puppeteer.md +++ b/sources/academy/tutorials/node_js/handle_blocked_requests_puppeteer.md @@ -5,7 +5,7 @@ sidebar_position: 15.9 slug: /node-js/handle-blocked-requests-puppeteer --- -One of the main defense mechanisms websites use to ensure they are not scraped by bots is allowing only a limited number of requests from a specific IP address. That's why Apify provides a [proxy](https://docs.apify.com/platform/proxy) component with intelligent rotation. With a large enough pool of proxies, you can multiply the number of allowed requests per day to cover your crawling needs. Let's look at how we can rotate proxies when using our [JavaScript SDK](https://github.com/apify/apify-sdk-js). +One of the main defense mechanisms websites use to ensure they are not scraped by bots is allowing only a limited number of requests from a specific IP address. That's why Apify provides a [proxy](https://docs.apify.com/proxy) component with intelligent rotation. With a large enough pool of proxies, you can multiply the number of allowed requests per day to cover your crawling needs. Let's look at how we can rotate proxies when using our [JavaScript SDK](https://github.com/apify/apify-sdk-js). > Getting around website defense mechanisms when crawling. diff --git a/sources/academy/tutorials/node_js/scraping_urls_list_from_google_sheets.md b/sources/academy/tutorials/node_js/scraping_urls_list_from_google_sheets.md index fa0c546a7d..a7fd2e84a7 100644 --- a/sources/academy/tutorials/node_js/scraping_urls_list_from_google_sheets.md +++ b/sources/academy/tutorials/node_js/scraping_urls_list_from_google_sheets.md @@ -5,7 +5,7 @@ sidebar_position: 15 slug: /node-js/scraping-urls-list-from-google-sheets --- -You can export URLs from [Google Sheets](https://workspace.google.com/products/sheets/) such as [this one](https://docs.google.com/spreadsheets/d/1-2mUcRAiBbCTVA5KcpFdEYWflLMLp9DDU3iJutvES4w) directly into an [Actor](/platform/actors)'s Start URLs field. +You can export URLs from [Google Sheets](https://workspace.google.com/products/sheets/) such as [this one](https://docs.google.com/spreadsheets/d/1-2mUcRAiBbCTVA5KcpFdEYWflLMLp9DDU3iJutvES4w) directly into an [Actor](/actors)'s Start URLs field. 1. Make sure the spreadsheet has one sheet and a simple structure to help the Actor find the URLs. diff --git a/sources/academy/tutorials/python/process_data_using_python.md b/sources/academy/tutorials/python/process_data_using_python.md index d6030597c2..1614bfbb46 100644 --- a/sources/academy/tutorials/python/process_data_using_python.md +++ b/sources/academy/tutorials/python/process_data_using_python.md @@ -17,7 +17,7 @@ In this tutorial, we will use the Actor we created in the [previous tutorial](/a ## Processing previously scraped data -In the previous tutorial, we set out to select our next holiday destination based on the forecast of the upcoming weather there. We have written an Actor that scrapes the BBC Weather forecast for the upcoming two weeks for three destinations: Prague, New York, and Honolulu. It then saves the scraped data to a [dataset](/platform/storage/dataset) on the Apify platform. +In the previous tutorial, we set out to select our next holiday destination based on the forecast of the upcoming weather there. We have written an Actor that scrapes the BBC Weather forecast for the upcoming two weeks for three destinations: Prague, New York, and Honolulu. It then saves the scraped data to a [dataset](/storage/dataset) on the Apify platform. Now, we need to process the scraped data and make a visualization that will help us decide which location has the best weather, and will therefore become our next holiday destination. @@ -108,7 +108,7 @@ axes.legend(loc='best') axes.figure.tight_layout() ``` -As the last step, we need to save the plot to a record in a [key-value store](/platform/storage/key-value-store) on the Apify platform, so that we can access it later. We save the rendered figure with the plot to an in-memory buffer, and then save the contents of that buffer to the default key-value store of the Actor run through its resource subclient. +As the last step, we need to save the plot to a record in a [key-value store](/storage/key-value-store) on the Apify platform, so that we can access it later. We save the rendered figure with the plot to an in-memory buffer, and then save the contents of that buffer to the default key-value store of the Actor run through its resource subclient. ```py # Get the resource sub-client for working with the default key-value store of the run diff --git a/sources/academy/tutorials/python/scrape_data_python.md b/sources/academy/tutorials/python/scrape_data_python.md index 440d296958..50e9a16749 100644 --- a/sources/academy/tutorials/python/scrape_data_python.md +++ b/sources/academy/tutorials/python/scrape_data_python.md @@ -217,7 +217,7 @@ Earlier in this tutorial, we learned how to scrape data from the web in Python u ## Processing previously scraped data -In the previous tutorial, we set out to select our next holiday destination based on the forecast of the upcoming weather there. We have written an Actor that scrapes the BBC Weather forecast for the upcoming two weeks for three destinations: Prague, New York, and Honolulu. It then saves the scraped data to a [dataset](/platform/storage/dataset) on the Apify platform. +In the previous tutorial, we set out to select our next holiday destination based on the forecast of the upcoming weather there. We have written an Actor that scrapes the BBC Weather forecast for the upcoming two weeks for three destinations: Prague, New York, and Honolulu. It then saves the scraped data to a [dataset](/storage/dataset) on the Apify platform. Now, we need to process the scraped data and make a visualization that will help us decide which location has the best weather, and will therefore become our next holiday destination. @@ -308,7 +308,7 @@ axes.legend(loc='best') axes.figure.tight_layout() ``` -As the last step, we need to save the plot to a record in a [key-value store](/platform/storage/key-value-store) on the Apify platform, so that we can access it later. We save the rendered figure with the plot to an in-memory buffer, and then save the contents of that buffer to the default key-value store of the Actor run through its resource subclient. +As the last step, we need to save the plot to a record in a [key-value store](/storage/key-value-store) on the Apify platform, so that we can access it later. We save the rendered figure with the plot to an in-memory buffer, and then save the contents of that buffer to the default key-value store of the Actor run through its resource subclient. ```py # Get the resource sub-client for working with the default key-value store of the run diff --git a/sources/academy/webscraping/advanced_web_scraping/crawling/crawling-with-search.md b/sources/academy/webscraping/advanced_web_scraping/crawling/crawling-with-search.md index ccd82fa71c..93fccb4ee4 100644 --- a/sources/academy/webscraping/advanced_web_scraping/crawling/crawling-with-search.md +++ b/sources/academy/webscraping/advanced_web_scraping/crawling/crawling-with-search.md @@ -73,7 +73,7 @@ Some sites will allow you to construct non-overlapping ranges. For example, you Non-overlapping ranges should remove the possibility of duplicate products (unless a [listing has multiple values](#can-a-listing-have-more-values)) and the lowest number of pages. -If the website supports only overlapping ranges (e.g. **$0-$5**, **$5–10**), it is not a big problem. Only a small portion of the listings will be duplicates, and they can be removed using a [request queue](/platform/storage/request-queue). +If the website supports only overlapping ranges (e.g. **$0-$5**, **$5–10**), it is not a big problem. Only a small portion of the listings will be duplicates, and they can be removed using a [request queue](/storage/request-queue). #### Can a listing have more values? {#can-a-listing-have-more-values} diff --git a/sources/academy/webscraping/anti_scraping/index.md b/sources/academy/webscraping/anti_scraping/index.md index 45b081b50e..423318a719 100644 --- a/sources/academy/webscraping/anti_scraping/index.md +++ b/sources/academy/webscraping/anti_scraping/index.md @@ -20,7 +20,7 @@ In development, it is crucial to check and adjust the configurations related to If you don't have time to read about the theory behind anti-scraping protections to fine-tune your scraping project and instead you need to get unblocked ASAP, here are some quick tips: -- Use high-quality proxies. [Residential proxies](/platform/proxy/residential-proxy) are the least blocked. You can find many providers out there like Apify, BrightData, Oxylabs, NetNut, etc. +- Use high-quality proxies. [Residential proxies](/proxy/residential-proxy) are the least blocked. You can find many providers out there like Apify, BrightData, Oxylabs, NetNut, etc. - Set **real-user-like HTTP settings** and **browser fingerprints**. [Crawlee](https://crawlee.dev/) uses statistically generated realistic HTTP headers and browser fingerprints by default for all of its crawlers. - Use a browser to pass bot capture challenges. We recommend [Playwright with Firefox](https://crawlee.dev/docs/examples/playwright-crawler-firefox) because it is not that common for scraping. You can also play with [non-headless mode](https://crawlee.dev/api/playwright-crawler/interface/PlaywrightCrawlerOptions#headless) and adjust other [fingerprint settings](https://crawlee.dev/api/browser-pool/interface/FingerprintGeneratorOptions). - Consider extracting data from **[private APIs](../api_scraping/index.md)** or **mobile app APIs**. They are usually much less protected. diff --git a/sources/academy/webscraping/scraping_basics_javascript/13_platform.md b/sources/academy/webscraping/scraping_basics_javascript/13_platform.md index 7aa9bfea54..2e2ee42ec9 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/13_platform.md +++ b/sources/academy/webscraping/scraping_basics_javascript/13_platform.md @@ -2,7 +2,7 @@ title: Using a scraping platform with Node.js sidebar_label: Using a platform description: Lesson about building a Node.js application for watching prices. Using the Apify platform to deploy a scraper. -slug: /scraping-basics-javascript/platform +slug: /scraping-basics-javascript/ --- import LegacyJsCourseAdmonition from '@site/src/components/LegacyJsCourseAdmonition'; @@ -64,7 +64,7 @@ Success: You are logged in to Apify as user1234! ## Turning our program to an Actor -Every program that runs on the Apify platform first needs to be packaged as a so-called [Actor](https://docs.apify.com/platform/actors) - a standardized container with designated places for input and output. +Every program that runs on the Apify platform first needs to be packaged as a so-called [Actor](https://docs.apify.com/actors) - a standardized container with designated places for input and output. Many [Actor templates](https://apify.com/templates/categories/javascript) simplify the setup for new projects. We'll skip those, as we're about to package an existing program. @@ -183,7 +183,7 @@ When the run finishes, the interface will turn green. On the **Output** tab, we :::info Accessing data -We don't need to click buttons to download the data. It's possible to retrieve it also using Apify's API, the `apify datasets` CLI command, or the JavaScript SDK. Learn more in the [Dataset docs](https://docs.apify.com/platform/storage/dataset). +We don't need to click buttons to download the data. It's possible to retrieve it also using Apify's API, the `apify datasets` CLI command, or the JavaScript SDK. Learn more in the [Dataset docs](https://docs.apify.com/storage/dataset). ::: @@ -191,15 +191,15 @@ We don't need to click buttons to download the data. It's possible to retrieve i Now that our scraper is deployed, let's automate its execution. In the Apify web interface, we'll go to [Schedules](https://console.apify.com/schedules). Let's click **Create new**, review the periodicity (default: daily), and specify the Actor to run. Then we'll click **Enable** - that's it! -From now on, the Actor will execute daily. We can inspect each run, view logs, check collected data, [monitor stats and charts](https://docs.apify.com/platform/monitoring), and even set up alerts. +From now on, the Actor will execute daily. We can inspect each run, view logs, check collected data, [monitor stats and charts](https://docs.apify.com/actors/running/monitoring), and even set up alerts. ![Schedule detail page](../scraping_basics/images/actor-schedule.webp) ## Adding support for proxies -If monitoring shows that our scraper frequently fails to reach the Warehouse Shop website, it's likely being blocked. To avoid this, we can [configure proxies](https://docs.apify.com/platform/proxy) so our requests come from different locations, reducing the chances of detection and blocking. +If monitoring shows that our scraper frequently fails to reach the Warehouse Shop website, it's likely being blocked. To avoid this, we can [configure proxies](https://docs.apify.com/proxy) so our requests come from different locations, reducing the chances of detection and blocking. -Proxy configuration is a type of [Actor input](https://docs.apify.com/platform/actors/running/input-and-output#input). Crawlee scrapers automatically connect their default dataset to the Actor output, but input must be handled manually. Inside the `.actor` directory we'll create a new file, `inputSchema.json`, with the following content: +Proxy configuration is a type of [Actor input](https://docs.apify.com/actors/running/input-and-output#input). Crawlee scrapers automatically connect their default dataset to the Actor output, but input must be handled manually. Inside the `.actor` directory we'll create a new file, `inputSchema.json`, with the following content: ```json title=".actor/inputSchema.json" { @@ -331,4 +331,4 @@ We've reached the end of the course - congratulations! Together, we've built a p - Executes periodically without manual intervention, collecting data over time. - Uses proxies to avoid being blocked. -We hope this serves as a solid foundation for your next scraping project. Perhaps you'll even [start publishing scrapers](https://docs.apify.com/platform/actors/publishing) for others to use - for a fee? +We hope this serves as a solid foundation for your next scraping project. Perhaps you'll even [start publishing scrapers](https://docs.apify.com/actors/publishing) for others to use - for a fee? diff --git a/sources/academy/webscraping/scraping_basics_python/13_platform.md b/sources/academy/webscraping/scraping_basics_python/13_platform.md index 6b8b2f86d2..18730d07b5 100644 --- a/sources/academy/webscraping/scraping_basics_python/13_platform.md +++ b/sources/academy/webscraping/scraping_basics_python/13_platform.md @@ -2,7 +2,7 @@ title: Using a scraping platform with Python sidebar_label: Using a platform description: Lesson about building a Python application for watching prices. Using the Apify platform to deploy a scraper. -slug: /scraping-basics-python/platform +slug: /scraping-basics-python/ --- **In this lesson, we'll deploy our application to a scraping platform that automatically runs it daily. We'll also use the platform's API to retrieve and work with the results.** @@ -80,9 +80,9 @@ Info: To install additional Python packages, you need to activate the virtual en Inside the `warehouse-watchdog` directory, we should see a `src` subdirectory containing several Python files, including `main.py`. This is a sample Beautiful Soup scraper provided by the template. -The file contains a single asynchronous function, `main()`. At the beginning, it handles [input](https://docs.apify.com/platform/actors/running/input-and-output#input), then passes that input to a small crawler built on top of the Crawlee framework. +The file contains a single asynchronous function, `main()`. At the beginning, it handles [input](https://docs.apify.com/actors/running/input-and-output#input), then passes that input to a small crawler built on top of the Crawlee framework. -Every program that runs on the Apify platform first needs to be packaged as a so-called [Actor](https://docs.apify.com/platform/actors) - a standardized container with designated places for input and output. Crawlee scrapers automatically connect their default dataset to the Actor output, but input must be handled explicitly in the code. +Every program that runs on the Apify platform first needs to be packaged as a so-called [Actor](https://docs.apify.com/actors) - a standardized container with designated places for input and output. Crawlee scrapers automatically connect their default dataset to the Actor output, but input must be handled explicitly in the code. ![The expected file structure](../scraping_basics/images/actor-file-structure.webp) @@ -266,7 +266,7 @@ When the run finishes, the interface will turn green. On the **Output** tab, we :::info Accessing data -We don't need to click buttons to download the data. It's possible to retrieve it also using Apify's API, the `apify datasets` CLI command, or the Python SDK. Learn more in the [Dataset docs](https://docs.apify.com/platform/storage/dataset). +We don't need to click buttons to download the data. It's possible to retrieve it also using Apify's API, the `apify datasets` CLI command, or the Python SDK. Learn more in the [Dataset docs](https://docs.apify.com/storage/dataset). ::: @@ -274,13 +274,13 @@ We don't need to click buttons to download the data. It's possible to retrieve i Now that our scraper is deployed, let's automate its execution. In the Apify web interface, we'll go to [Schedules](https://console.apify.com/schedules). Let's click **Create new**, review the periodicity (default: daily), and specify the Actor to run. Then we'll click **Enable** - that's it! -From now on, the Actor will execute daily. We can inspect each run, view logs, check collected data, [monitor stats and charts](https://docs.apify.com/platform/monitoring), and even set up alerts. +From now on, the Actor will execute daily. We can inspect each run, view logs, check collected data, [monitor stats and charts](https://docs.apify.com/actors/running/monitoring), and even set up alerts. ![Schedule detail page](../scraping_basics/images/actor-schedule.webp) ## Adding support for proxies -If monitoring shows that our scraper frequently fails to reach the Warehouse Shop website, it's likely being blocked. To avoid this, we can [configure proxies](https://docs.apify.com/platform/proxy) so our requests come from different locations, reducing the chances of detection and blocking. +If monitoring shows that our scraper frequently fails to reach the Warehouse Shop website, it's likely being blocked. To avoid this, we can [configure proxies](https://docs.apify.com/proxy) so our requests come from different locations, reducing the chances of detection and blocking. Proxy configuration is a type of Actor input, so let's start by reintroducing the necessary code. We'll update `warehouse-watchdog/src/main.py` like this: @@ -434,4 +434,4 @@ We've reached the end of the course - congratulations! Together, we've built a p - Executes periodically without manual intervention, collecting data over time. - Uses proxies to avoid being blocked. -We hope this serves as a solid foundation for your next scraping project. Perhaps you'll even [start publishing scrapers](https://docs.apify.com/platform/actors/publishing) for others to use - for a fee? +We hope this serves as a solid foundation for your next scraping project. Perhaps you'll even [start publishing scrapers](https://docs.apify.com/actors/publishing) for others to use - for a fee? diff --git a/sources/platform/console/billing.md b/sources/platform/account/billing.md similarity index 99% rename from sources/platform/console/billing.md rename to sources/platform/account/billing.md index 640046b5b2..9ab311f5a2 100644 --- a/sources/platform/console/billing.md +++ b/sources/platform/account/billing.md @@ -3,7 +3,7 @@ title: Billing description: View invoices, track current billing cycle usage, manage subscriptions and limits, and review historical usage from the Billings page in Console. sidebar_position: 3 category: platform -slug: /console/billing +slug: /account/billing --- ## Current period diff --git a/sources/platform/collaboration/access_rights.md b/sources/platform/account/collaboration/access_rights.md similarity index 76% rename from sources/platform/collaboration/access_rights.md rename to sources/platform/account/collaboration/access_rights.md index 2b0df3c6ed..78f2b0a961 100644 --- a/sources/platform/collaboration/access_rights.md +++ b/sources/platform/account/collaboration/access_rights.md @@ -3,12 +3,12 @@ title: Access rights description: Manage permissions for your private resources such as Actors, Actor runs, and storages. Allow other users to read, run, modify, or build new versions. sidebar_position: 12 category: platform -slug: /collaboration/access-rights +slug: /account/collaboration/access-rights --- You can securely share your resources with others by using a granular permissions system. Such resources include Actors, tasks, key-value stores, datasets, and request queues. -For example, you can let your colleague run an [Actor](../actors/index.mdx) or view a [dataset](../storage/dataset.md) but not modify it. You can also grant permission to update an Actor and build a new version. [Storages](../storage/index.md) are sharable in the same way as a **read** permission or a combination of both **read** and **write** permissions. +For example, you can let your colleague run an [Actor](/actors) or view a [dataset](/storage/dataset) but not modify it. You can also grant permission to update an Actor and build a new version. [Storages](/storage) are sharable in the same way as a **read** permission or a combination of both **read** and **write** permissions. ## Grant access to resources diff --git a/sources/platform/collaboration/general-resource-access.md b/sources/platform/account/collaboration/general-resource-access.md similarity index 99% rename from sources/platform/collaboration/general-resource-access.md rename to sources/platform/account/collaboration/general-resource-access.md index 78d321fce9..208e4a12eb 100644 --- a/sources/platform/collaboration/general-resource-access.md +++ b/sources/platform/account/collaboration/general-resource-access.md @@ -3,7 +3,7 @@ title: General resource access description: Control how Apify resources are shared. Set default access to open ID-based access or restricted, and manage link sharing and pre-signed URLs. sidebar_position: 1 category: platform -slug: /collaboration/general-resource-access +slug: /account/collaboration/general-resource-access --- Some resources, like storages, Actor runs or Actor builds, can be shared simply by sending their unique resource ID or Console link and the recipient can then view the data in Console or fetch it via API without needing an API token. This is very useful for ad-hoc collaboration, integrating third party tools that connect to data in your Apify account or quick prototypes. @@ -305,7 +305,7 @@ const recordUrl = await storeClient.getRecordPublicUrl(recordKey); await Actor.pushData({ recordUrl }); ``` -To learn more about generating pre-signed URLs, refer to the section [Sharing restricted resources with pre-signed URLs](/platform/collaboration/general-resource-access#pre-signed-urls). +To learn more about generating pre-signed URLs, refer to the section [Sharing restricted resources with pre-signed URLs](/account/collaboration/general-resource-access#pre-signed-urls). :::note Using Console URLs diff --git a/sources/platform/collaboration/images/general-resouce-access/account-setting.png b/sources/platform/account/collaboration/images/general-resouce-access/account-setting.png similarity index 100% rename from sources/platform/collaboration/images/general-resouce-access/account-setting.png rename to sources/platform/account/collaboration/images/general-resouce-access/account-setting.png diff --git a/sources/platform/collaboration/images/general-resouce-access/copy-record-url-kv-store.png b/sources/platform/account/collaboration/images/general-resouce-access/copy-record-url-kv-store.png similarity index 100% rename from sources/platform/collaboration/images/general-resouce-access/copy-record-url-kv-store.png rename to sources/platform/account/collaboration/images/general-resouce-access/copy-record-url-kv-store.png diff --git a/sources/platform/collaboration/images/general-resouce-access/copy-shareable-link.png b/sources/platform/account/collaboration/images/general-resouce-access/copy-shareable-link.png similarity index 100% rename from sources/platform/collaboration/images/general-resouce-access/copy-shareable-link.png rename to sources/platform/account/collaboration/images/general-resouce-access/copy-shareable-link.png diff --git a/sources/platform/collaboration/images/general-resouce-access/creating-actor-issue.png b/sources/platform/account/collaboration/images/general-resouce-access/creating-actor-issue.png similarity index 100% rename from sources/platform/collaboration/images/general-resouce-access/creating-actor-issue.png rename to sources/platform/account/collaboration/images/general-resouce-access/creating-actor-issue.png diff --git a/sources/platform/collaboration/images/general-resouce-access/share-resource-dialog.png b/sources/platform/account/collaboration/images/general-resouce-access/share-resource-dialog.png similarity index 100% rename from sources/platform/collaboration/images/general-resouce-access/share-resource-dialog.png rename to sources/platform/account/collaboration/images/general-resouce-access/share-resource-dialog.png diff --git a/sources/platform/collaboration/images/organizations/configure-permissions.png b/sources/platform/account/collaboration/images/organizations/configure-permissions.png similarity index 100% rename from sources/platform/collaboration/images/organizations/configure-permissions.png rename to sources/platform/account/collaboration/images/organizations/configure-permissions.png diff --git a/sources/platform/collaboration/images/organizations/integrations.png b/sources/platform/account/collaboration/images/organizations/integrations.png similarity index 100% rename from sources/platform/collaboration/images/organizations/integrations.png rename to sources/platform/account/collaboration/images/organizations/integrations.png diff --git a/sources/platform/collaboration/images/organizations/members.png b/sources/platform/account/collaboration/images/organizations/members.png similarity index 100% rename from sources/platform/collaboration/images/organizations/members.png rename to sources/platform/account/collaboration/images/organizations/members.png diff --git a/sources/platform/collaboration/images/organizations/my-organizations.png b/sources/platform/account/collaboration/images/organizations/my-organizations.png similarity index 100% rename from sources/platform/collaboration/images/organizations/my-organizations.png rename to sources/platform/account/collaboration/images/organizations/my-organizations.png diff --git a/sources/platform/collaboration/images/organizations/roles.png b/sources/platform/account/collaboration/images/organizations/roles.png similarity index 100% rename from sources/platform/collaboration/images/organizations/roles.png rename to sources/platform/account/collaboration/images/organizations/roles.png diff --git a/sources/platform/collaboration/images/organizations/switch-to-organization.png b/sources/platform/account/collaboration/images/organizations/switch-to-organization.png similarity index 100% rename from sources/platform/collaboration/images/organizations/switch-to-organization.png rename to sources/platform/account/collaboration/images/organizations/switch-to-organization.png diff --git a/sources/platform/collaboration/images/share-actor.svg b/sources/platform/account/collaboration/images/share-actor.svg similarity index 100% rename from sources/platform/collaboration/images/share-actor.svg rename to sources/platform/account/collaboration/images/share-actor.svg diff --git a/sources/platform/collaboration/index.md b/sources/platform/account/collaboration/index.md similarity index 72% rename from sources/platform/collaboration/index.md rename to sources/platform/account/collaboration/index.md index 3c7b4c4272..974070a924 100644 --- a/sources/platform/collaboration/index.md +++ b/sources/platform/account/collaboration/index.md @@ -3,7 +3,7 @@ title: Collaboration description: Learn how to collaborate with other users and manage permissions for organizations or private resources such as Actors, Actor runs, and storages. sidebar_position: 12 category: platform -slug: /collaboration +slug: /account/collaboration --- Apify was built from the ground up as a collaborative platform. Whether you’re publishing your Actor in Apify Store or sharing a dataset with a teammate, collaboration is deeply integrated into how Apify works. You can share your resources (like Actors, runs, or storages) with others, manage permissions, or invite collaborators to your organization. By default, each system resource you create is only available to you, the owner. However, you can grant access to other users, making it easy to collaborate effectively and securely. @@ -11,8 +11,8 @@ Apify was built from the ground up as a collaborative platform. Whether you’re While most resources can be shared by assigning permissions (see [Access Rights](./access_rights.md)), some resources can also be shared simply by using their unique links or IDs. There are two types of resources in terms of sharing: - _Resources that require explicit access by default:_ - - [Actors](../actors/running/index.md), [tasks](../actors/running/tasks.md) - - Can be shared only by inviting collaborators using [Access Rights](./access_rights.md)) or using [Organization Accounts](./organization_account/index.md) + - [Actors](/actors/running), [tasks](/actors/running/tasks) + - Can be shared only by inviting collaborators using [Access Rights](./access_rights.md)) or using [Organization Accounts](/account/collaboration/organization) - _Resources supporting both explicit access and link sharing:_ - Actor runs, Actor builds and storage resources (datasets, key-value stores, request queues) - Can be shared by inviting collaborators or simply by sharing a unique direct link @@ -21,19 +21,19 @@ You can control access to your resources in four ways: - + - - + + - + - - + +
Access rightsAccess rights Enables you to grant access to another user for a certain resource you own. This way, you can share results with your client, or two engineers can collaborate on developing one Actor.
Share resources by linkCertain resources (runs, builds and storages) can by shared just by their link. Anyone with their ID is able to access them. This is configurable via General resource accessShare resources by linkCertain resources (runs, builds and storages) can by shared just by their link. Anyone with their ID is able to access them. This is configurable via General resource access
Organization accountOrganization account Apify's organization account allows multiple engineers to collaborate on team projects with role-specific access permissions.
Publishing in Apify StoreAnother way to share your Actor with other users is to publish it in Apify Store. When publishing your Actor, you can make it a Paid Actor and get paid by the users benefiting from your tool. For more information, read the publishing and monetization section.Publishing in Apify StoreAnother way to share your Actor with other users is to publish it in Apify Store. When publishing your Actor, you can make it a Paid Actor and get paid by the users benefiting from your tool. For more information, read the publishing and monetization section.
diff --git a/sources/platform/collaboration/list_of_permissions.md b/sources/platform/account/collaboration/list_of_permissions.md similarity index 85% rename from sources/platform/collaboration/list_of_permissions.md rename to sources/platform/account/collaboration/list_of_permissions.md index 02a6ed1e54..ea12f4ba54 100644 --- a/sources/platform/collaboration/list_of_permissions.md +++ b/sources/platform/account/collaboration/list_of_permissions.md @@ -2,14 +2,14 @@ title: List of permissions description: Learn about the access rights you can grant to other users. See a list of all access options for Apify resources such as Actors, Actor runs/tasks and storage. sidebar_position: 12.2 -slug: /collaboration/list-of-permissions +slug: /account/collaboration/list-of-permissions --- This document contains all the access options that can be granted to resources on the Apify platform. ## Actors -To learn about Apify Actors, check out the [documentation](../actors/index.mdx). +To learn about Apify Actors, check out the [documentation](/actors). ### Actor @@ -30,11 +30,11 @@ To learn about Apify Actors, check out the [documentation](../actors/index.mdx). | View runs | View a list of Actor task runs and their details. | | Manage access rights | Manage Actor task access rights. | -To learn about Actor tasks, see the [documentation](../actors/running/tasks.md). +To learn about Actor tasks, see the [documentation](/actors/running/tasks). ## Storage -For more information about Storage, see its [documentation](../storage/index.md). +For more information about Storage, see its [documentation](/storage). ### Dataset @@ -44,7 +44,7 @@ For more information about Storage, see its [documentation](../storage/index.md) | Write | Edit dataset settings, push data to it, and remove the dataset. | | Manage access rights | Manage dataset access rights. | -To learn about dataset storage, see its [documentation](../storage/dataset.md). +To learn about dataset storage, see its [documentation](/storage/dataset). ### Key-value-store @@ -54,7 +54,7 @@ To learn about dataset storage, see its [documentation](../storage/dataset.md). | Write | Edit key-value store settings, add, update or remove its records, and delete the key-value store. | | Manage access rights | Manage key-value store access rights. | -To learn about key-value stores, see the [documentation](../storage/key_value_store.md). +To learn about key-value stores, see the [documentation](/storage/key-value-store). ### Request queue @@ -64,7 +64,7 @@ To learn about key-value stores, see the [documentation](../storage/key_value_st | Write | Edit request queue settings, add, update, or remove its records, and delete the request queue. | | Manage access rights | Manage request queue access rights. | -To learn about request queue storage, see the [documentation](../storage/request_queue.md). +To learn about request queue storage, see the [documentation](/storage/request-queue). ## Proxy @@ -72,11 +72,11 @@ To learn about request queue storage, see the [documentation](../storage/request |------------|---------------------------| | Proxy | Allow to use Apify Proxy. | -To learn about Apify Proxy, see its [documentation](../proxy/index.md). +To learn about Apify Proxy, see its [documentation](/proxy). ## User permissions -Permissions that can be granted to members of organizations. To learn about the organization account, see its [documentation](./organization_account/index.md). +Permissions that can be granted to members of organizations. To learn about the organization account, see its [documentation](/account/collaboration/organization). | Permission | Description | |---------------------|-----------------------------------------------------------------------| diff --git a/sources/platform/collaboration/organization_account/how_to_use.md b/sources/platform/account/collaboration/organization/how_to_use.md similarity index 93% rename from sources/platform/collaboration/organization_account/how_to_use.md rename to sources/platform/account/collaboration/organization/how_to_use.md index 6dab78b62b..1150a63980 100644 --- a/sources/platform/collaboration/organization_account/how_to_use.md +++ b/sources/platform/account/collaboration/organization/how_to_use.md @@ -2,7 +2,7 @@ title: Using the organization account description: Learn to use and manage your organization account using Apify Console or the Apify API. View the organizations you are in and manage your memberships. sidebar_position: 2 -slug: /collaboration/organization-account/how-to-use +slug: /account/collaboration/organization/how-to-use sidebar_label: How to use --- @@ -40,7 +40,7 @@ The organization, its Actors, and its integrations will keep running as they are While you cannot manage an organization account's settings and members via API, you can access its Actor and task runs, webhooks, schedules, and storages just as you would with any other account. -As a member of an organization, you are assigned an [API token](../../integrations/index.mdx) (under the **API & Integrations** tab) and proxy password (click the **Proxy** button in the left menu) for accessing the Apify platform via REST API. +As a member of an organization, you are assigned an [API token](/integrations) (under the **API & Integrations** tab) and proxy password (click the **Proxy** button in the left menu) for accessing the Apify platform via REST API. ![Integration tokens](../images/organizations/integrations.png) diff --git a/sources/platform/collaboration/organization_account/index.md b/sources/platform/account/collaboration/organization/index.md similarity index 92% rename from sources/platform/collaboration/organization_account/index.md rename to sources/platform/account/collaboration/organization/index.md index 52945b3057..a1242ebc64 100644 --- a/sources/platform/collaboration/organization_account/index.md +++ b/sources/platform/account/collaboration/organization/index.md @@ -2,7 +2,7 @@ title: Organization account description: Create a specialized account for your organization to encourage collaboration and manage permissions. Convert an existing account, or create one from scratch. sidebar_position: 12.1 -slug: /collaboration/organization-account +slug: /account/collaboration/organization --- Organization accounts allow groups to collaborate on projects. It enables you to manage your team members' [permissions](../list_of_permissions.md) and to centralize your billing without having to share the credentials of a single personal account. @@ -12,7 +12,7 @@ You can [switch](./how_to_use.md) between your personal and organization account You can set up an organization in two ways: - [Create a new organization](#create-a-new-organization). If you don't have integrations set up yet, or if they are easy to change, you can create a new organization, preserving your personal account. -- [Convert an existing account](#convert-an-existing-account) into an organization. If your Actors and [integrations](../../integrations/index.mdx) are set up in a personal account, it is probably best to convert that account into an organization. This will preserve all your integrations but means you will have a new personal account created for you. +- [Convert an existing account](#convert-an-existing-account) into an organization. If your Actors and [integrations](/integrations) are set up in a personal account, it is probably best to convert that account into an organization. This will preserve all your integrations but means you will have a new personal account created for you. Prefer video to reading? [See the video tutorial](https://www.youtube.com/watch?v=BIL6HqtnvKk) for organization accounts. diff --git a/sources/platform/collaboration/organization_account/setup.md b/sources/platform/account/collaboration/organization/setup.md similarity index 87% rename from sources/platform/collaboration/organization_account/setup.md rename to sources/platform/account/collaboration/organization/setup.md index f5807b07d1..0fed008fb8 100644 --- a/sources/platform/collaboration/organization_account/setup.md +++ b/sources/platform/account/collaboration/organization/setup.md @@ -2,7 +2,7 @@ title: Setup description: Configure your organization account by inviting new members and assigning their roles. Manage team members' access permissions to the organization's resources. sidebar_position: 1 -slug: /collaboration/organization-account/setup +slug: /account/collaboration/organization/setup --- After creating your organization, you can configure its settings. The **Account** tab allows you to: @@ -37,7 +37,7 @@ To edit the permissions for each role, click on the **Configure permissions** bu > Each member can only have one role to avoid conflicting permissions. -You can configure individual permissions for each resource type such as Actors, Actor tasks or storage. Bear in mind that if a user has the **read** permission for [storages](../../storage/index.md), you cannot prevent them from accessing a particular storage (e.g. a certain [dataset](../../storage/index.md)) - they will have access to all of the organization's storages. +You can configure individual permissions for each resource type such as Actors, Actor tasks or storage. Bear in mind that if a user has the **read** permission for [storages](/storage), you cannot prevent them from accessing a particular storage (e.g. a certain [dataset](/storage)) - they will have access to all of the organization's storages. **Some permissions have dependencies**. For example, if someone has the **Actor run** permission, it is likely they will also need the **storage write** permission, so they can store the results from their Actor runs. diff --git a/sources/platform/console/index.md b/sources/platform/account/console.md similarity index 71% rename from sources/platform/console/index.md rename to sources/platform/account/console.md index 09ca5868bf..01cb8dafda 100644 --- a/sources/platform/console/index.md +++ b/sources/platform/account/console.md @@ -3,7 +3,7 @@ title: Apify Console description: "Get started with Apify Console: create an account, sign in with email, Google, or GitHub, and manage your web scraping projects from one place." sidebar_position: 1 category: platform -slug: /console +slug: /account/console --- [Apify Console](https://console.apify.com) is a web application where you can manage all your Apify projects and resources. @@ -59,17 +59,17 @@ To navigate Apify Console, use the left-side panel or keyboard shortcuts. | Section | Keyboard shortcut | Description | | :--- | :--- | :--- | -| [Apify Store](/platform/console/store) | G + O | Search for Actors that suit your web-scraping needs. | -| [Dashboard](/platform/console) | G + H | Overview of your account with recently viewed Actors, suggestions, and recent runs. | -| [Actors](/platform/actors) | G + A | View recent and bookmarked Actors. | -| [Runs](/platform/actors/running/runs-and-builds) | G + R | View your recent runs. | -| [Saved tasks](/platform/actors/running/tasks) | G + T | View your saved tasks. | -| [Integrations](/platform/integrations) | G + I | View your integrations. | -| [Schedules](/platform/schedules) | G + U | Schedule Actor runs and tasks to run at a specified time. | -| [Development](/platform/actors/development) | G + D | • **My Actors** - see Actors developed by you.
• **Insights** - see analytics for your Actors.
• **Messaging** - check reported issues or send emails to users of your Actors. | -| [Proxy](/platform/proxy) | G + P | View your proxy usage and credentials. | -| [Storage](/platform/storage) | G + E | View stored results of your runs in various data formats. | -| [Billing](/platform/console/billing) | G + B | View billing information, statistics, and invoices. | -| [Settings](/platform/console/settings) | G + S | Change settings of your account. | +| [Apify Store](/console/store) | G + O | Search for Actors that suit your web-scraping needs. | +| [Dashboard](/account/console) | G + H | Overview of your account with recently viewed Actors, suggestions, and recent runs. | +| [Actors](/actors) | G + A | View recent and bookmarked Actors. | +| [Runs](/actors/running/runs-and-builds) | G + R | View your recent runs. | +| [Saved tasks](/actors/running/tasks) | G + T | View your saved tasks. | +| [Integrations](/integrations) | G + I | View your integrations. | +| [Schedules](/actors/running/schedules) | G + U | Schedule Actor runs and tasks to run at a specified time. | +| [Development](/actors/development) | G + D | • **My Actors** - see Actors developed by you.
• **Insights** - see analytics for your Actors.
• **Messaging** - check reported issues or send emails to users of your Actors. | +| [Proxy](/proxy) | G + P | View your proxy usage and credentials. | +| [Storage](/storage) | G + E | View stored results of your runs in various data formats. | +| [Billing](/account/billing) | G + B | View billing information, statistics, and invoices. | +| [Settings](/account/settings) | G + S | Change settings of your account. | To view all keyboard shortcuts, press Shift + ?. diff --git a/sources/platform/console/images/console-billing-current-period.png b/sources/platform/account/images/console-billing-current-period.png similarity index 100% rename from sources/platform/console/images/console-billing-current-period.png rename to sources/platform/account/images/console-billing-current-period.png diff --git a/sources/platform/console/images/console-billing-historical-usage-by-actors.png b/sources/platform/account/images/console-billing-historical-usage-by-actors.png similarity index 100% rename from sources/platform/console/images/console-billing-historical-usage-by-actors.png rename to sources/platform/account/images/console-billing-historical-usage-by-actors.png diff --git a/sources/platform/console/images/console-billing-historical-usage.png b/sources/platform/account/images/console-billing-historical-usage.png similarity index 100% rename from sources/platform/console/images/console-billing-historical-usage.png rename to sources/platform/account/images/console-billing-historical-usage.png diff --git a/sources/platform/console/images/console-billing-invoices.png b/sources/platform/account/images/console-billing-invoices.png similarity index 100% rename from sources/platform/console/images/console-billing-invoices.png rename to sources/platform/account/images/console-billing-invoices.png diff --git a/sources/platform/console/images/console-billing-limits.png b/sources/platform/account/images/console-billing-limits.png similarity index 100% rename from sources/platform/console/images/console-billing-limits.png rename to sources/platform/account/images/console-billing-limits.png diff --git a/sources/platform/console/images/console-billing-pricing.png b/sources/platform/account/images/console-billing-pricing.png similarity index 100% rename from sources/platform/console/images/console-billing-pricing.png rename to sources/platform/account/images/console-billing-pricing.png diff --git a/sources/platform/console/images/console-billing-subscription.png b/sources/platform/account/images/console-billing-subscription.png similarity index 100% rename from sources/platform/console/images/console-billing-subscription.png rename to sources/platform/account/images/console-billing-subscription.png diff --git a/sources/platform/console/images/two-factor-authentication.svg b/sources/platform/account/images/two-factor-authentication.svg similarity index 100% rename from sources/platform/console/images/two-factor-authentication.svg rename to sources/platform/account/images/two-factor-authentication.svg diff --git a/sources/platform/account/index.mdx b/sources/platform/account/index.mdx new file mode 100644 index 0000000000..097aaa8861 --- /dev/null +++ b/sources/platform/account/index.mdx @@ -0,0 +1,40 @@ +--- +title: Account +description: Manage your Apify account, billing, security, organization, and access permissions. +sidebar_label: Overview +sidebar_position: 0 +slug: /account +--- + +import Card from "@site/src/components/Card"; +import CardGrid from "@site/src/components/CardGrid"; + +Manage your Apify account settings, billing, security, and team collaboration. + + + + + + + + diff --git a/sources/platform/console/settings.md b/sources/platform/account/settings.md similarity index 96% rename from sources/platform/console/settings.md rename to sources/platform/account/settings.md index 25df3408f7..27136da8bd 100644 --- a/sources/platform/console/settings.md +++ b/sources/platform/account/settings.md @@ -3,7 +3,7 @@ title: Account settings description: Learn how to manage your Apify account, configure integrations, create and manage organizations, and set notification preferences in the Settings tab. sidebar_position: 4 category: platform -slug: /console/settings +slug: /account/settings --- ## Account @@ -36,11 +36,11 @@ In the **Session information** section, you can adjust the session configuration ## API & Integrations -The **API & Integrations** tab provides essential tools for accessing the Apify platform programmatically. Here, you can manage your **API tokens**, which are necessary for using the [Apify API](https://docs.apify.com/api/v2). The tab also shows **third-party apps and services** connected to your account, **account-level integrations**, and **Actor OAuth accounts**. For detailed guidance on utilizing these integrations, refer to the [Integrations documentation](https://docs.apify.com/platform/integrations). +The **API & Integrations** tab provides essential tools for accessing the Apify platform programmatically. Here, you can manage your **API tokens**, which are necessary for using the [Apify API](https://docs.apify.com/api/v2). The tab also shows **third-party apps and services** connected to your account, **account-level integrations**, and **Actor OAuth accounts**. For detailed guidance on utilizing these integrations, refer to the [Integrations documentation](https://docs.apify.com/integrations). ### MCP connectors -The **MCP connectors** section lets you authorize third-party MCP servers (such as Notion, Slack, GitHub, or Supabase) once and reuse those connections across any Actor that accepts them. For an overview of the feature, see [MCP connectors](/platform/integrations/mcp-connectors). +The **MCP connectors** section lets you authorize third-party MCP servers (such as Notion, Slack, GitHub, or Supabase) once and reuse those connections across any Actor that accepts them. For an overview of the feature, see [MCP connectors](/integrations/mcp-connectors). #### Create a connector diff --git a/sources/platform/console/two-factor-authentication.md b/sources/platform/account/two-factor-authentication.md similarity index 99% rename from sources/platform/console/two-factor-authentication.md rename to sources/platform/account/two-factor-authentication.md index 0715634be3..abfda9a62b 100644 --- a/sources/platform/console/two-factor-authentication.md +++ b/sources/platform/account/two-factor-authentication.md @@ -3,7 +3,7 @@ title: Two-factor authentication description: Enable two-factor authentication on your Apify Console account using an authenticator app to add a second layer of security against unauthorized access. sidebar_position: 5 category: platform -slug: /console/two-factor-authentication +slug: /account/two-factor-authentication --- Two-factor authentication (2FA) provides an extra layer of security that helps protect your Apify account. With 2FA enabled, logging into your account consists of two steps: diff --git a/sources/platform/actors/development/actor_definition/actor_json.md b/sources/platform/actors/development/actor_definition/actor_json.md index c8a42af095..83b848e79a 100644 --- a/sources/platform/actors/development/actor_definition/actor_json.md +++ b/sources/platform/actors/development/actor_definition/actor_json.md @@ -81,13 +81,13 @@ Actor `name`, `version`, `buildTag`, and `environmentVariables` are currently on | `dockerContextDir` | Optional | The path to the directory to be used as the Docker context when building the Actor. The path is relative to the location of the `actor.json` file. This property is useful for monorepos containing multiple Actors. Refer to the [Actor monorepos](../deployment/source_types.md#actor-monorepos) section for more details. | | `readme` | Optional | The path to the README file to be used on the platform. If not specified, the system will look for README files in the `.actor/README.md` and `README.md` paths, in that order of preference. Check out [Apify Marketing Playbook to learn how to write a quality README files](https://apify.notion.site/How-to-create-an-Actor-README-759a1614daa54bee834ee39fe4d98bc2) guidance. | | `input` | Optional | You can embed your [input schema](./input_schema/index.md) object directly in `actor.json` under the `input` field. You can also provide a path to a custom input schema. If not provided, the input schema at `.actor/INPUT_SCHEMA.json` or `INPUT_SCHEMA.json` is used, in this order of preference. You can also use the `inputSchema` alias interchangeably. | -| `output` | Optional | You can embed your [output schema](./output_schema/index.md) object directly in `actor.json` under the `output` field. You can also provide a path to a custom output schema. [Read more](/platform/actors/development/actor-definition/output-schema) about Actor output schemas. You can also use the `outputSchema` alias interchangeably. | +| `output` | Optional | You can embed your [output schema](./output_schema/index.md) object directly in `actor.json` under the `output` field. You can also provide a path to a custom output schema. [Read more](/actors/development/actor-definition/output-schema) about Actor output schemas. You can also use the `outputSchema` alias interchangeably. | | `changelog` | Optional | The path to the CHANGELOG file displayed in the Information tab of the Actor in Apify Console next to Readme. If not provided, the CHANGELOG at `.actor/CHANGELOG.md` or `CHANGELOG.md` is used, in this order of preference. Your Actor doesn't need to have a CHANGELOG but it is a good practice to keep it updated for published Actors. | -| `storages.dataset` | Optional | You can define the schema of the items in your dataset under the `storages.dataset` field. This can be either an embedded object or a path to a JSON schema file. [Read more](/platform/actors/development/actor-definition/dataset-schema) about Actor dataset schemas. | -| `storages.datasets` | Optional | You can define multiple datasets for the Actor under the `storages.datasets` field. This can be an object containing embedded objects or paths to a JSON schema files. [Read more](/platform/actors/development/actor-definition/dataset-schema/multiple-datasets) about multiple dataset schemas. | +| `storages.dataset` | Optional | You can define the schema of the items in your dataset under the `storages.dataset` field. This can be either an embedded object or a path to a JSON schema file. [Read more](/actors/development/actor-definition/dataset-schema) about Actor dataset schemas. | +| `storages.datasets` | Optional | You can define multiple datasets for the Actor under the `storages.datasets` field. This can be an object containing embedded objects or paths to a JSON schema files. [Read more](/actors/development/actor-definition/dataset-schema/multiple-datasets) about multiple dataset schemas. | | `defaultMemoryMbytes` | Optional | Specifies the default amount of memory in megabytes to be used when the Actor is started. Can be an integer or a [dynamic memory expression string](./dynamic_actor_memory/index.md). | -| `minMemoryMbytes` | Optional | Specifies the minimum amount of memory in megabytes required by the Actor to run. Requires an _integer_ value. If both `minMemoryMbytes` and `maxMemoryMbytes` are set, then `minMemoryMbytes` must be equal or lower than `maxMemoryMbytes`. Refer to the [Usage and resources](https://docs.apify.com/platform/actors/running/usage-and-resources#memory) for more details about memory allocation. | -| `maxMemoryMbytes` | Optional | Specifies the maximum amount of memory in megabytes required by the Actor to run. It can be used to control the costs of run. Requires an _integer_ value. Refer to the [Usage and resources](https://docs.apify.com/platform/actors/running/usage-and-resources#memory) for more details about memory allocation. | +| `minMemoryMbytes` | Optional | Specifies the minimum amount of memory in megabytes required by the Actor to run. Requires an _integer_ value. If both `minMemoryMbytes` and `maxMemoryMbytes` are set, then `minMemoryMbytes` must be equal or lower than `maxMemoryMbytes`. Refer to the [Usage and resources](https://docs.apify.com/actors/running/usage-and-resources#memory) for more details about memory allocation. | +| `maxMemoryMbytes` | Optional | Specifies the maximum amount of memory in megabytes required by the Actor to run. It can be used to control the costs of run. Requires an _integer_ value. Refer to the [Usage and resources](https://docs.apify.com/actors/running/usage-and-resources#memory) for more details about memory allocation. | | `usesStandbyMode` | Optional | Boolean specifying whether the Actor will have [Standby mode](../programming_interface/actor_standby.md) enabled. | | `webServerSchema` | Optional | Defines an OpenAPI v3 schema for the web server running in the Actor. This can be either an embedded object or a path to a JSON schema file. Use this when your Actor starts its own HTTP server and you want to describe its interface. | | `webServerMcpPath` | Optional | The HTTP endpoint path where the Actor exposes its MCP (Model Context Protocol) server functionality. When set, the Actor is recognized as an MCP server. For example, setting `"/mcp"` designates the `/mcp` endpoint as the MCP interface. This path becomes part of the Actor's stable URL when [Standby mode](../programming_interface/actor_standby.md) is enabled. | diff --git a/sources/platform/actors/development/actor_definition/dataset_schema/validation.md b/sources/platform/actors/development/actor_definition/dataset_schema/validation.md index fafd46cfca..8102adbeb5 100644 --- a/sources/platform/actors/development/actor_definition/dataset_schema/validation.md +++ b/sources/platform/actors/development/actor_definition/dataset_schema/validation.md @@ -10,7 +10,7 @@ import TabItem from '@theme/TabItem'; To define a schema for a default dataset of an Actor run, you need to set `fields` property in the dataset schema. -:::info +:::info Define a single item The schema defines a single item in the dataset. Be careful not to define the schema as an array, it always needs to be a schema of an object. @@ -247,4 +247,4 @@ When you configure the dataset fields schema, we generate a field list and measu - For objects, this tracks the number of keys - For booleans, this tracks whether the boolean was set to true. Minimum is always 0, but maximum can be either 1 or 0 based on whether at least one item in the dataset has the boolean field set to true. -You can use them in [monitoring](../../../../monitoring#alert-configuration). +You can use them in [monitoring](/actors/running/monitoring#alert-configuration). diff --git a/sources/platform/actors/development/actor_definition/docker.md b/sources/platform/actors/development/actor_definition/docker.md index 18f8c48156..ccce6709a8 100644 --- a/sources/platform/actors/development/actor_definition/docker.md +++ b/sources/platform/actors/development/actor_definition/docker.md @@ -5,7 +5,7 @@ slug: /actors/development/actor-definition/dockerfile sidebar_position: 8 --- -When developing an [Actor](/sources/platform/actors/index.mdx) on the Apify platform, you can choose from a variety of pre-built Docker images to serve as the base for your Actor. These base images come with pre-installed dependencies and tools, making it easier to set up your development environment and ensuring consistent behavior across different environments. +When developing an [Actor](/actors) on the Apify platform, you can choose from a variety of pre-built Docker images to serve as the base for your Actor. These base images come with pre-installed dependencies and tools, making it easier to set up your development environment and ensuring consistent behavior across different environments. ## Base Docker images diff --git a/sources/platform/actors/development/actor_definition/index.md b/sources/platform/actors/development/actor_definition/index.md index 6655f8c368..9df2034405 100644 --- a/sources/platform/actors/development/actor_definition/index.md +++ b/sources/platform/actors/development/actor_definition/index.md @@ -14,12 +14,12 @@ Actors have the following elements: - The main **[actor.json](./actor_json.md)** file contains **metadata** such as the Actor name, description, author, version, and links pointing to the other definition files below. - **[Dockerfile](./docker.md)** which specifies where is the Actor's source code, how to build it, and run it. - **Documentation** in the form of a **README.md** file. -- **[Input](./input_schema/index.md)** and **[dataset schemas](/platform/actors/development/actor-definition/dataset-schema)** that describe what input the Actor requires and what results it produces. +- **[Input](./input_schema/index.md)** and **[dataset schemas](/actors/development/actor-definition/dataset-schema)** that describe what input the Actor requires and what results it produces. - Access to an out-of-box **[storage](../../../storage/index.md)** system for Actor data, results, and files. The documentation and the input/dataset schemas make it possible for people to easily understand what the Actor does, enter the required inputs both in the user interface or API, and integrate the Actor's results with their other workflows. Actors can easily call and interact with each other, enabling building more complex systems on top of simple ones. -The Apify platform provides an open [API](/api/v2), cron-style [scheduler](../../schedules), [webhooks](../../../integrations/programming/webhooks/index.md), and [integrations](../../integrations) to services such as Zapier or Make, which make it easy for users to integrate Actors with their existing workflows. Anyone is welcome to [publish Actors](/platform/actors/publishing) in [Apify Store](https://apify.com/store), and you can even [monetize your Actors](/platform/actors/publishing/monetize). +The Apify platform provides an open [API](/api/v2), cron-style [scheduler](/actors/running/schedules), [webhooks](../../../integrations/programming/webhooks/index.md), and [integrations](../../integrations) to services such as Zapier or Make, which make it easy for users to integrate Actors with their existing workflows. Anyone is welcome to [publish Actors](/actors/publishing) in [Apify Store](https://apify.com/store), and you can even [monetize your Actors](/actors/publishing/monetize). Actors can be developed and run locally and then easily deployed to the Apify platform using the [Apify CLI](/cli) or a [GitHub integration](../../../integrations/programming/github.md). For more details, see the [Deployment](../deployment/index.md) section. diff --git a/sources/platform/actors/development/actor_definition/input_schema/secret_input.md b/sources/platform/actors/development/actor_definition/input_schema/secret_input.md index 89c360b17f..1a88897488 100644 --- a/sources/platform/actors/development/actor_definition/input_schema/secret_input.md +++ b/sources/platform/actors/development/actor_definition/input_schema/secret_input.md @@ -9,7 +9,7 @@ The secret input feature lets you mark specific input fields of an Actor as sens :::tip MCP connectors for third-party credentials -If the third-party service you need exposes a [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) (MCP) server, consider using [MCP connectors](/platform/integrations/mcp-connectors) instead. The user authorizes the service once in their account settings, and the Actor receives a connector ID rather than a credential. The service token, API key, or PAT stays server-side and is injected by the MCP Proxy at runtime. For credentials without an MCP server (database passwords, generic API keys), continue to use `isSecret: true`. +If the third-party service you need exposes a [Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro) (MCP) server, consider using [MCP connectors](/integrations/mcp-connectors) instead. The user authorizes the service once in their account settings, and the Actor receives a connector ID rather than a credential. The service token, API key, or PAT stays server-side and is injected by the MCP Proxy at runtime. For credentials without an MCP server (database passwords, generic API keys), continue to use `isSecret: true`. ::: diff --git a/sources/platform/actors/development/actor_definition/input_schema/specification.md b/sources/platform/actors/development/actor_definition/input_schema/specification.md index ee440c6e25..aeb87950df 100644 --- a/sources/platform/actors/development/actor_definition/input_schema/specification.md +++ b/sources/platform/actors/development/actor_definition/input_schema/specification.md @@ -890,7 +890,7 @@ As with objects, the sub-schema feature for arrays only works for level 1 sub-pr Resource type identifies what kind of Apify Platform object is referred to in the input field. For example, the Key-value store resource type can be referred to using a string ID. -Supported resource types are storage resources (dataset, key-value store, request queue) and [MCP connectors](/platform/integrations/mcp-connectors), which let an Actor call third-party MCP servers using credentials the user has authorized in their account. +Supported resource types are storage resources (dataset, key-value store, request queue) and [MCP connectors](/integrations/mcp-connectors), which let an Actor call third-party MCP servers using credentials the user has authorized in their account. For Actor developers, the resource input value is a string representing either the resource ID or (unique) name. The type of the property is either `string` or `array`. In case of `array` (for multiple resources) the return value is an array of IDs or names. @@ -937,7 +937,7 @@ Rendered input: | --- | --- | --- | --- | | `type` | `string` | Yes | Specifies the type of input - `string` for single value. | | `editor` | One of | No | Visual editor used for
the input field. Defaults to `resourcePicker`. | -| `resourceType` | One of | Yes | Type of Apify Platform resource. Use `mcpConnector` to accept an [MCP connector](/platform/integrations/mcp-connectors) as input. | +| `resourceType` | One of | Yes | Type of Apify Platform resource. Use `mcpConnector` to accept an [MCP connector](/integrations/mcp-connectors) as input. | | `resourcePermissions` | Array of strings; allowed values: | Yes for storage resources; not used for `mcpConnector` | Permissions requested for the referenced resource. Use [\"READ\"] for read-only access, or [\"READ\", \"WRITE\"] to allow writes. | | `pattern` | String | No | Regular expression that will be used to validate the input. If validation fails, the Actor will not run. | | `minLength` | Integer | No | Minimum length of the string. | @@ -949,7 +949,7 @@ Rendered input: | --- | --- | --- | --- | | `type` | `array` | Yes | Specifies the type of input - `array` for multiple values. | | `editor` | One of | No | Visual editor used for
the input field. Defaults to `resourcePicker`. | -| `resourceType` | One of | Yes | Type of Apify Platform resource. Use `mcpConnector` to accept [MCP connectors](/platform/integrations/mcp-connectors) as input. | +| `resourceType` | One of | Yes | Type of Apify Platform resource. Use `mcpConnector` to accept [MCP connectors](/integrations/mcp-connectors) as input. | | `resourcePermissions` | Array of strings; allowed values: | Yes for storage resources; not used for `mcpConnector` | Permissions requested for the referenced resources. Use [\"READ\"] for read-only access, or [\"READ\", \"WRITE\"] to allow writes. Applies to each selected resource. | | `minItems` | Integer | No | Minimum number of items the array can contain. | | `maxItems` | Integer | No | Maximum number of items the array can contain. | @@ -969,7 +969,7 @@ This setting defines runtime access only and doesn't change field visibility or #### MCP connector resource type -When `resourceType` is `mcpConnector`, the input field accepts one or more [MCP connectors](/platform/integrations/mcp-connectors) the user has authorized in their account. The Actor receives the connector ID (or an array of IDs) as the input value and connects to the upstream MCP server through the Apify MCP Proxy at runtime. +When `resourceType` is `mcpConnector`, the input field accepts one or more [MCP connectors](/integrations/mcp-connectors) the user has authorized in their account. The Actor receives the connector ID (or an array of IDs) as the input value and connects to the upstream MCP server through the Apify MCP Proxy at runtime. The `mcpConnector` resource type does not use `resourcePermissions`. Instead, eligibility and per-tool access are declared through a required `mcpServers` field, which lists the upstream MCP server URLs and tool constraints the Actor accepts: @@ -993,7 +993,7 @@ The `mcpConnector` resource type does not use `resourcePermissions`. Instead, el } ``` -The same declaration acts as both eligibility filter (the input picker only offers compatible connectors) and runtime ceiling (the proxy rejects tool calls outside the declared set). For the full `mcpServers` schema, behavioral hints, and code samples, see [Build Actors with MCP connectors](/platform/integrations/mcp-connectors/use-in-actors). +The same declaration acts as both eligibility filter (the input picker only offers compatible connectors) and runtime ceiling (the proxy rejects tool calls outside the declared set). For the full `mcpServers` schema, behavioral hints, and code samples, see [Build Actors with MCP connectors](/integrations/mcp-connectors/use-in-actors). ### Deprecation of `patternKey` and `patternValue` diff --git a/sources/platform/actors/development/actor_definition/output_schema/index.md b/sources/platform/actors/development/actor_definition/output_schema/index.md index 96694a4d10..3c939e4939 100644 --- a/sources/platform/actors/development/actor_definition/output_schema/index.md +++ b/sources/platform/actors/development/actor_definition/output_schema/index.md @@ -6,7 +6,7 @@ description: Define an output schema to specify where your Actor stores its resu slug: /actors/development/actor-definition/output-schema --- -The Actor output schema builds upon the schemas for the [dataset](/platform/actors/development/actor-definition/dataset-schema) and [key-value store](/platform/actors/development/actor-definition/key-value-store-schema). It specifies where an Actor stores its output and defines templates for accessing that output. Apify Console uses these output definitions to display run results, and the Actor run's `GET` endpoint includes them in the output property. +The Actor output schema builds upon the schemas for the [dataset](/actors/development/actor-definition/dataset-schema) and [key-value store](/actors/development/actor-definition/key-value-store-schema). It specifies where an Actor stores its output and defines templates for accessing that output. Apify Console uses these output definitions to display run results, and the Actor run's `GET` endpoint includes them in the output property. ## Why output schema matters @@ -263,7 +263,7 @@ After you define `views` and `collections` in `dataset_schema.json` and `key_val :::note Output schema complements dataset schema -The output schema defines *where* data is stored and how to access it. The [dataset schema](/platform/actors/development/actor-definition/dataset-schema) defines *what* fields each item contains, including descriptions and examples. Use both schemas together: +The output schema defines *where* data is stored and how to access it. The [dataset schema](/actors/development/actor-definition/dataset-schema) defines *what* fields each item contains, including descriptions and examples. Use both schemas together: - Output schema: Declares that results are in the default dataset - Dataset schema: Describes each field with `title`, `description`, and `example` diff --git a/sources/platform/actors/development/actor_definition/web_server_schema/index.md b/sources/platform/actors/development/actor_definition/web_server_schema/index.md index cf13896e1b..f4628e9937 100644 --- a/sources/platform/actors/development/actor_definition/web_server_schema/index.md +++ b/sources/platform/actors/development/actor_definition/web_server_schema/index.md @@ -6,7 +6,7 @@ description: Attach an OpenAPI specification to your Actor to enable the interac slug: /actors/development/actor-definition/web-server-schema --- -The `webServerSchema` field in `.actor/actor.json` attaches an [OpenAPI 3.x](https://spec.openapis.org/oas/v3.0.3) specification to your Actor. You can define the schema for any Actor that exposes an HTTP server. When you enable [standby mode](/platform/actors/development/programming-interface/standby), Apify Console and Apify Store render an interactive **Standby** tab on the Actor's detail page. From there you can browse endpoints, inspect request and response schemas, and send requests directly from the browser. +The `webServerSchema` field in `.actor/actor.json` attaches an [OpenAPI 3.x](https://spec.openapis.org/oas/v3.0.3) specification to your Actor. You can define the schema for any Actor that exposes an HTTP server. When you enable [standby mode](/actors/development/programming-interface/standby), Apify Console and Apify Store render an interactive **Standby** tab on the Actor's detail page. From there you can browse endpoints, inspect request and response schemas, and send requests directly from the browser. ![Apify Console showing the Standby tab with the Endpoints section rendered from the Actor's OpenAPI spec](../images/console-standby-openapi-swagger.png) @@ -90,9 +90,9 @@ Follow the standard [OpenAPI 3.x format](https://spec.openapis.org/oas/latest.ht ## Build and deploy -The build process validates `webServerSchema`, similar to other Actor schemas like [input schema](/platform/actors/development/actor-definition/input-schema) and [dataset schema](/platform/actors/development/actor-definition/dataset-schema). If the spec is malformed, the build fails with a validation error. +The build process validates `webServerSchema`, similar to other Actor schemas like [input schema](/actors/development/actor-definition/input-schema) and [dataset schema](/actors/development/actor-definition/dataset-schema). If the spec is malformed, the build fails with a validation error. -Once deployed, the **Standby** tab appears automatically on the Actor's detail page when you enable [standby mode](/platform/actors/development/programming-interface/standby). It renders your spec with [Swagger UI](https://swagger.io/tools/swagger-ui/) and handles authentication automatically - Actor users can send requests without configuring API tokens. +Once deployed, the **Standby** tab appears automatically on the Actor's detail page when you enable [standby mode](/actors/development/programming-interface/standby). It renders your spec with [Swagger UI](https://swagger.io/tools/swagger-ui/) and handles authentication automatically - Actor users can send requests without configuring API tokens. :::note Servers field is overwritten @@ -104,5 +104,5 @@ Your `servers` array is replaced with the Actor's standby URL at display time. C | Field | Description | | --- | --- | -| `usesStandbyMode` | Must be `true` for the **Standby** tab to appear. See [standby mode](/platform/actors/development/programming-interface/standby). | -| `webServerSchema` | The OpenAPI spec that powers the **Standby** tab. Defined in [`.actor/actor.json`](/platform/actors/development/actor-definition/actor-json) as an inline object or a path to a JSON file. | +| `usesStandbyMode` | Must be `true` for the **Standby** tab to appear. See [standby mode](/actors/development/programming-interface/standby). | +| `webServerSchema` | The OpenAPI spec that powers the **Standby** tab. Defined in [`.actor/actor.json`](/actors/development/actor-definition/actor-json) as an inline object or a path to a JSON file. | diff --git a/sources/platform/actors/development/builds_and_runs/runs.md b/sources/platform/actors/development/builds_and_runs/runs.md index 5c949873d2..2e2bb0964e 100644 --- a/sources/platform/actors/development/builds_and_runs/runs.md +++ b/sources/platform/actors/development/builds_and_runs/runs.md @@ -13,7 +13,7 @@ You can start an Actor in several ways: - Manually from the [Apify Console](https://console.apify.com/actors) UI - Via the [Apify API](/api/v2/act-runs-post) -- Using the [Scheduler](../../../schedules.md) provided by the Apify platform +- Using the [Scheduler](/actors/running/schedules) provided by the Apify platform - By one of the available [integrations](../../../integrations/index.mdx) ## Input and environment variables diff --git a/sources/platform/actors/development/deployment/continuous_integration.md b/sources/platform/actors/development/deployment/continuous_integration.md index 4a6ec15eee..8bf09dc596 100644 --- a/sources/platform/actors/development/deployment/continuous_integration.md +++ b/sources/platform/actors/development/deployment/continuous_integration.md @@ -164,8 +164,8 @@ For a more complete Bitbucket setup with automated tests, see the [Bitbucket CI ## Use the Apify GitHub integration {#github-integration} -Apify Console includes a built-in [GitHub integration](/platform/integrations/github) that links an Actor directly to a GitHub repository. When you connect a repository, Apify automatically rebuilds the Actor on every push - no workflow files or webhook configuration needed. +Apify Console includes a built-in [GitHub integration](/integrations/github) that links an Actor directly to a GitHub repository. When you connect a repository, Apify automatically rebuilds the Actor on every push - no workflow files or webhook configuration needed. This is the quickest way to get automated builds running, but it's less flexible than the GitHub Actions approach. It doesn't support running tests before building, managing multiple version tags from different branches, or customizing the build pipeline. -To set it up, see the [GitHub integration](/platform/integrations/github) documentation. +To set it up, see the [GitHub integration](/integrations/github) documentation. diff --git a/sources/platform/actors/development/deployment/index.md b/sources/platform/actors/development/deployment/index.md index d14cf0c5db..5ffe326d53 100644 --- a/sources/platform/actors/development/deployment/index.md +++ b/sources/platform/actors/development/deployment/index.md @@ -5,7 +5,7 @@ description: Learn how to deploy your Actor to the Apify platform using the Apif slug: /actors/development/deployment --- -Deploying an Actor involves uploading your [source code](/platform/actors/development/actor-definition) and [building](/platform/actors/development/builds-and-runs/builds) it on the Apify platform. Once deployed, you can run and scale your Actor in the cloud. +Deploying an Actor involves uploading your [source code](/actors/development/actor-definition) and [building](/actors/development/builds-and-runs/builds) it on the Apify platform. Once deployed, you can run and scale your Actor in the cloud. ## Deploy using the Apify CLI diff --git a/sources/platform/actors/development/deployment/source_types.md b/sources/platform/actors/development/deployment/source_types.md index fa3d535123..e0731b1aea 100644 --- a/sources/platform/actors/development/deployment/source_types.md +++ b/sources/platform/actors/development/deployment/source_types.md @@ -17,11 +17,11 @@ This section explains the various sources types available for Apify Actors and h ## Web IDE -This is the default option when your Actor's source code is hosted on the Apify platform. It offers quick previews and updates to your source code, easy file and directory browsing, and direct testing of the [`INPUT_SCHEMA.json`](/platform/actors/development/actor-definition/input-schema) on the Apify platform. +This is the default option when your Actor's source code is hosted on the Apify platform. It offers quick previews and updates to your source code, easy file and directory browsing, and direct testing of the [`INPUT_SCHEMA.json`](/actors/development/actor-definition/input-schema) on the Apify platform. A `Dockerfile` is mandatory for all Actors. When using the default NodeJS Dockerfile, you'll typically need `main.js` for your source code and `package.json` for [npm](https://www.npmjs.com/) package configurations. -For more information on creating custom Dockerfiles or using Apify's base images, refer to the [Dockerfile](/platform/actors/development/actor-definition/dockerfile#custom-dockerfile) and [base Docker images](/platform/actors/development/actor-definition/dockerfile#base-docker-images) documentation. +For more information on creating custom Dockerfiles or using Apify's base images, refer to the [Dockerfile](/actors/development/actor-definition/dockerfile#custom-dockerfile) and [base Docker images](/actors/development/actor-definition/dockerfile#base-docker-images) documentation. ## Git repository @@ -35,7 +35,7 @@ To use a specific directory, add it after the branch/tag, separated by a colon ( :::note GitHub integration -You can easily set up an integration where the Actor is automatically rebuilt on every commit to the Git repository. For more details, see [GitHub integration](/platform/integrations/github). +You can easily set up an integration where the Actor is automatically rebuilt on every commit to the Git repository. For more details, see [GitHub integration](/integrations/github). ::: @@ -69,7 +69,7 @@ Remember that each key can only be used once per Git hosting service (GitHub, Bi ### Actor monorepos -To manage multiple Actors in a single repository, use the `dockerContextDir` property in the [Actor definition](/platform/actors/development/actor-definition/actor-json) to set the Docker context directory (if not provided then the repository root is used). In the Dockerfile, copy both the Actor's source and any shared code into the Docker image. +To manage multiple Actors in a single repository, use the `dockerContextDir` property in the [Actor definition](/actors/development/actor-definition/actor-json) to set the Docker context directory (if not provided then the repository root is used). In the Dockerfile, copy both the Actor's source and any shared code into the Docker image. To enable sharing Dockerfiles between multiple Actors, the Actor build process passes the `ACTOR_PATH_IN_DOCKER_CONTEXT` build argument to the Docker build. It contains the relative path from `dockerContextDir` to the directory selected as the root of the Actor in Apify Console (the "directory" part of the Actor's git URL). diff --git a/sources/platform/actors/development/index.md b/sources/platform/actors/development/index.md index 3c14545181..290647092d 100644 --- a/sources/platform/actors/development/index.md +++ b/sources/platform/actors/development/index.md @@ -8,40 +8,43 @@ slug: /actors/development This section will guide you through the whole story of [Actor](../index.mdx) development. -You can follow chapters sequentially from [Quick start](/platform/actors/development/quick-start), where you learn how to create your first Actor in just a few minutes, through the more technical sections describing the whole Actor model, up to the [Performance](/sources/platform/actors/development/performance.md) section, where you learn how to fine-tune your Actor to get the most out of the Apify platform. +New to building Actors? Start with [Get started](/get-started) to create your first one in minutes. This section covers the technical Actor model in depth, from the Actor definition through to the [Performance](/actors/development/performance) section, where you learn to fine-tune your Actor to get the most out of the Apify platform. + +## Technology stack + +Any code that can run inside of a Docker container can be turned into an Apify [Actor](../index.mdx). This gives you freedom in choosing your technical stack, including programming language and technologies. + +But to fully benefit from running on top of the Apify platform, we recommend you choose either JavaScript/Node.js or Python, where Apify provides first-level support regarding its SDK, API clients, and learning materials. + +For these languages, you can also [choose from many code templates](https://apify.com/templates) that help you to kickstart your project quickly. import Card from "@site/src/components/Card"; import CardGrid from "@site/src/components/CardGrid"; - diff --git a/sources/platform/actors/development/programming_interface/environment_variables.md b/sources/platform/actors/development/programming_interface/environment_variables.md index d457b1bd11..fd47075e68 100644 --- a/sources/platform/actors/development/programming_interface/environment_variables.md +++ b/sources/platform/actors/development/programming_interface/environment_variables.md @@ -40,7 +40,7 @@ Variables prefixed with `ACTOR_` are defined by the [Actor specification](https: | `ACTOR_DEFAULT_DATASET_ID` | Unique identifier for the default dataset associated with the current Actor run. | | `ACTOR_DEFAULT_KEY_VALUE_STORE_ID` | Unique identifier for the default key-value store associated with the current Actor run. | | `ACTOR_DEFAULT_REQUEST_QUEUE_ID` | Unique identifier for the default request queue associated with the current Actor run. | -| `ACTOR_INPUT_KEY` | Key of the record in the default key-value store that holds the [Actor input](/platform/actors/running/input-and-output#input). | +| `ACTOR_INPUT_KEY` | Key of the record in the default key-value store that holds the [Actor input](/actors/running/input-and-output#input). | | `ACTOR_STORAGES_JSON` | JSON-encoded unique identifiers of storages associated with the current Actor run, e.g. `{ "keyValueStores": { "default": "" }, "datasets": { "default": "" }, "requestQueues": { "default": "" } }`. | | `ACTOR_MEMORY_MBYTES` | Size of memory allocated for the Actor run, in megabytes. Can be used to optimize memory usage or finetuning of low-level external libraries. | | `ACTOR_MAX_TOTAL_CHARGE_USD` | For pay-per-event Actors, the user-set limit on run cost. Do not exceed this limit. | @@ -53,9 +53,9 @@ Variables prefixed with `ACTOR_` are defined by the [Actor specification](https: | `ACTOR_BUILD_TAGS` | A comma-separated list of tags of the Actor build used in the run. Note that this environment variable is assigned at the time of start of the Actor and doesn't change over time, even if the assigned build tags change. | | `ACTOR_TASK_ID` | ID of the Actor task. Empty if Actor is run outside of any task, e.g. directly using the API. | | `ACTOR_WEB_SERVER_URL` | Unique public URL for accessing the Actor run web server from the outside world. | -| `ACTOR_WEB_SERVER_PORT` | TCP port for the Actor to start an HTTP server on. This server can be used to receive external messages or expose monitoring and control interfaces. The server also receives messages from the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. | -| `ACTOR_STANDBY_URL` | URL for accessing web servers of Actor runs in the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. | -| `ACTOR_EVENTS_WEBSOCKET_URL` | Websocket URL where Actor may listen for [events](/platform/actors/development/programming-interface/system-events) from Actor platform. | +| `ACTOR_WEB_SERVER_PORT` | TCP port for the Actor to start an HTTP server on. This server can be used to receive external messages or expose monitoring and control interfaces. The server also receives messages from the [Actor Standby](/actors/development/programming-interface/standby) mode. | +| `ACTOR_STANDBY_URL` | URL for accessing web servers of Actor runs in the [Actor Standby](/actors/development/programming-interface/standby) mode. | +| `ACTOR_EVENTS_WEBSOCKET_URL` | Websocket URL where Actor may listen for [events](/actors/development/programming-interface/system-events) from Actor platform. | @@ -81,10 +81,10 @@ Variables prefixed with `APIFY_` are Apify-platform-specific extensions that go | `APIFY_PROXY_PORT` | TCP port number to be used for connecting to Apify Proxy. | | `APIFY_PROXY_STATUS_URL` | URL for retrieving proxy status information. Appending `?format=json` to this URL returns the data in JSON format for programmatic processing. | | `APIFY_API_PUBLIC_BASE_URL` | Public URL of the Apify API. May be used to interact with the platform programmatically. Typically set to `api.apify.com`. | -| `APIFY_MCP_PROXY_URL` | Base URL of the Apify MCP Proxy. Connect to an [MCP connector](/platform/integrations/mcp-connectors) at `${APIFY_MCP_PROXY_URL}/` using `APIFY_TOKEN` as the bearer token. | +| `APIFY_MCP_PROXY_URL` | Base URL of the Apify MCP Proxy. Connect to an [MCP connector](/integrations/mcp-connectors) at `${APIFY_MCP_PROXY_URL}/` using `APIFY_TOKEN` as the bearer token. | | `APIFY_WORKFLOW_KEY` | Identifier used for grouping related runs and API calls together. | -| `APIFY_META_ORIGIN` | Specifies how an Actor run was started. Possible values are in [Runs and builds](/platform/actors/running/runs-and-builds#origin) documentation. | -| `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE` | Path to the secret key used to decrypt [Secret inputs](/platform/actors/development/actor-definition/input-schema/secret-input). | +| `APIFY_META_ORIGIN` | Specifies how an Actor run was started. Possible values are in [Runs and builds](/actors/running/runs-and-builds#origin) documentation. | +| `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE` | Path to the secret key used to decrypt [Secret inputs](/actors/development/actor-definition/input-schema/secret-input). | | `APIFY_INPUT_SECRETS_PRIVATE_KEY_PASSPHRASE` | Passphrase for the input secret key specified in `APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE`. | | ~~`APIFY_HEADLESS`~~ | _Deprecated_ - on the Apify platform this is always set to **1**, so web browsers inside the Actor always run in headless mode (no windowing system available). | @@ -100,7 +100,7 @@ To use Console variables, remove the `environmentVariables` key from the local f ### Define in `actor.json` -Actor owners can define custom environment variables in [`.actor/actor.json`](/platform/actors/development/actor-definition/actor-json). All keys from `environmentVariables` will be set as environment variables into the Apify platform after you push Actor to Apify. +Actor owners can define custom environment variables in [`.actor/actor.json`](/actors/development/actor-definition/actor-json). All keys from `environmentVariables` will be set as environment variables into the Apify platform after you push Actor to Apify. ```json { @@ -136,7 +136,7 @@ For sensitive data such as API keys or passwords, enable the **Secret** option w :::caution Visibility of environment variables in public Actors -When you [publish your Actor](/platform/actors/publishing/publish), environment variables not marked as **Secret** are visible to anyone on the Actor detail page alongside the source code. Enable **Hide source files from Actor detail** in the Actor's **Settings** to hide both. +When you [publish your Actor](/actors/publishing/publish), environment variables not marked as **Secret** are visible to anyone on the Actor detail page alongside the source code. Enable **Hide source files from Actor detail** in the Actor's **Settings** to hide both. Secret environment variables are never exposed on the Actor detail page regardless of this setting. Always mark sensitive values as **Secret**. diff --git a/sources/platform/actors/development/programming_interface/index.mdx b/sources/platform/actors/development/programming_interface/index.mdx index b51c87ddc2..914c431c08 100644 --- a/sources/platform/actors/development/programming_interface/index.mdx +++ b/sources/platform/actors/development/programming_interface/index.mdx @@ -14,36 +14,36 @@ This chapter will guide you through all the commands you need to build your firs diff --git a/sources/platform/actors/development/programming_interface/metamorph.md b/sources/platform/actors/development/programming_interface/metamorph.md index 3d05f73088..e470586622 100644 --- a/sources/platform/actors/development/programming_interface/metamorph.md +++ b/sources/platform/actors/development/programming_interface/metamorph.md @@ -35,7 +35,7 @@ To make your Actor compatible with metamorph, use `Actor.getInput()` instead of :::note Runtime limits -There's a limit to how many times you can metamorph a single run. Refer to the [Actor runtime limits](/platform/limits#actor-limits) for more details. +There's a limit to how many times you can metamorph a single run. Refer to the [Actor runtime limits](/limits#actor-limits) for more details. ::: diff --git a/sources/platform/actors/development/quick-start/index.mdx b/sources/platform/actors/development/quick-start/index.mdx deleted file mode 100644 index 56be64aae1..0000000000 --- a/sources/platform/actors/development/quick-start/index.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Actor development quick start -sidebar_label: Quick start -sidebar_position: 0.5 -description: Create your first Apify Actor using the web IDE in Apify Console or locally with the Apify CLI, then choose from a library of ready-made code templates. -slug: /actors/development/quick-start ---- - -import Card from "@site/src/components/Card"; -import CardGrid from "@site/src/components/CardGrid"; - -:::info Before you build - -Before you start building your own Actor, try out a couple of existing Actors from [Apify Store](https://apify.com/store). See the [Running Actors](/platform/actors/running) section for more information on running existing Actors. - -::: - -## Technology stack - -Any code that can run inside of a Docker container can be turned into Apify [Actor](/platform/actors). This gives you freedom in choosing your technical stack, including programming language and technologies. - -But to fully benefit from running on top of the Apify platform, we recommend you choose either JavaScript/Node.js or Python, where Apify provides first-level support regarding its SDK, API clients, and learning materials. - -For these languages, you can also [choose from many code templates](https://apify.com/templates) that help you to kickstart your project quickly. - -## Development paths - -You can choose from three main ways to build your Actor, depending on your preferences and requirements: - - - - - - diff --git a/sources/platform/actors/index.mdx b/sources/platform/actors/index.mdx index c284f76c21..4f6adf1ba0 100644 --- a/sources/platform/actors/index.mdx +++ b/sources/platform/actors/index.mdx @@ -1,7 +1,8 @@ --- title: Actors description: Learn how to develop, run and share serverless cloud programs. Create your own web scraping and automation tools and publish them on the Apify platform. -sidebar_position: 7 +sidebar_label: Overview +sidebar_position: 0 category: platform slug: /actors --- @@ -9,7 +10,7 @@ slug: /actors import Card from "@site/src/components/Card"; import CardGrid from "@site/src/components/CardGrid"; -Actors are serverless cloud programs that take a structured JSON input, perform a task (web scraping, browser automation, data processing, and more), and optionally produce a structured output. Run them manually in [Apify Console](https://console.apify.com/actors), through the [API](/api) or [CLI](/cli), or on a [schedule](/platform/schedules), and combine them into larger automations. +Actors are serverless cloud programs that take a structured JSON input, perform a task (web scraping, browser automation, data processing, and more), and optionally produce a structured output. Run them manually in [Apify Console](https://console.apify.com/actors), through the [API](/api) or [CLI](/cli), or on a [schedule](/actors/running/schedules), and combine them into larger automations. :::info Additional context @@ -23,17 +24,17 @@ For more context, read the [Actor whitepaper](https://whitepaper.actor/). @@ -53,4 +54,4 @@ The documentation and input/output schemas help people understand what the Actor ## Public and private Actors -Actors can be [public](/platform/actors/running/actors-in-store) or private. Private Actors are yours to use and keep; no one will see them if you don't want them to. Public Actors are available to everyone in [Apify Store](https://apify.com/store). You can make them free to use, or you can [charge for them](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/). +Actors can be [public](/actors/running/actors-in-store) or private. Private Actors are yours to use and keep; no one will see them if you don't want them to. Public Actors are available to everyone in [Apify Store](https://apify.com/store). You can make them free to use, or you can [charge for them](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/). diff --git a/sources/platform/actors/publishing/actor-rating.mdx b/sources/platform/actors/publishing/actor-rating.mdx index 5f396f19ef..3fabe2d4f4 100644 --- a/sources/platform/actors/publishing/actor-rating.mdx +++ b/sources/platform/actors/publishing/actor-rating.mdx @@ -5,7 +5,7 @@ slug: /actors/publishing/actor-rating sidebar_position: 6 --- -Users can review your Actor in Apify Store. Their ratings impact your Actor's [quality score](/platform/actors/publishing/quality-score) and help it rank higher in search results. User reviews are also a great source of feedback that you can use to improve your Actor. +Users can review your Actor in Apify Store. Their ratings impact your Actor's [quality score](/actors/publishing/quality-score) and help it rank higher in search results. User reviews are also a great source of feedback that you can use to improve your Actor. ## About the Actor rating @@ -35,7 +35,7 @@ To edit your response, on your reply, select **Options** > **Edit**. ## Report a review -If you believe that a review doesn't follow the community standards, you can report it. For details, see [Report a review](/platform/actors/running/reviews#report-a-review). +If you believe that a review doesn't follow the community standards, you can report it. For details, see [Report a review](/actors/running/reviews#report-a-review). Note that the support team verifies all reports and only deletes the reviews that violate Apify policies. Users can share their experience even if it's negative. Here are some invalid reasons for reporting a review: diff --git a/sources/platform/actors/publishing/index.mdx b/sources/platform/actors/publishing/index.mdx index 65a18f5a58..57db42c5ff 100644 --- a/sources/platform/actors/publishing/index.mdx +++ b/sources/platform/actors/publishing/index.mdx @@ -35,7 +35,7 @@ Packaging your software as an Actor allows you to launch new SaaS product faster - Pay-per-event for specific operations - Fixed rental fee for continuous access -To learn more, visit the [Actors in Store](/platform/actors/running/actors-in-store#pricing-models) page. +To learn more, visit the [Actors in Store](/actors/running/actors-in-store#pricing-models) page. ## Maintain public Actors diff --git a/sources/platform/actors/publishing/monetize/index.mdx b/sources/platform/actors/publishing/monetize/index.mdx index dba01faa18..bbc59d3fb4 100644 --- a/sources/platform/actors/publishing/monetize/index.mdx +++ b/sources/platform/actors/publishing/monetize/index.mdx @@ -15,10 +15,10 @@ Apify Store allows you to monetize your web scraping, automation, and AI agent p You can publish Actors on Apify Store under one of the following pricing models: -- [Pay per event (PPE)](/platform/actors/publishing/monetize/pay-per-event): Users pay for specific events that are programmatically triggered from the Actor's source code. You can define these events and include actions such as generating a single result or starting an Actor. You can also choose whether to pass the platform usage costs on to users. +- [Pay per event (PPE)](/actors/publishing/monetize/pay-per-event): Users pay for specific events that are programmatically triggered from the Actor's source code. You can define these events and include actions such as generating a single result or starting an Actor. You can also choose whether to pass the platform usage costs on to users. - Pay per usage: Users can run the Actor without any additional charges beyond the platform usage costs generated by the Actor. -For a detailed comparison of pricing models from the perspective of your users, see [Actors in Store](/platform/actors/running/actors-in-store). +For a detailed comparison of pricing models from the perspective of your users, see [Actors in Store](/actors/running/actors-in-store). ## Set up monetization @@ -33,10 +33,10 @@ To set up monetization for your Actor, first complete your billing and payment d The monetization setup consists of three steps: 1. In the **Actor pricing** step, you can: - - Modify or delete the [`apify-actor-start`](/platform/actors/publishing/monetize/pay-per-event#synthetic-start-event) event. - - Modify or delete the [`apify-default-dataset-item`](/platform/actors/publishing/monetize/pay-per-event#synthetic-default-dataset-item-event) event. - - Define [custom events](/platform/actors/publishing/monetize/pay-per-event#actor-events) and their prices. - - [Transfer the platform usage costs on to users](/platform/actors/publishing/monetize/pay-per-event#platform-usage-costs). + - Modify or delete the [`apify-actor-start`](/actors/publishing/monetize/pay-per-event#synthetic-start-event) event. + - Modify or delete the [`apify-default-dataset-item`](/actors/publishing/monetize/pay-per-event#synthetic-default-dataset-item-event) event. + - Define [custom events](/actors/publishing/monetize/pay-per-event#actor-events) and their prices. + - [Transfer the platform usage costs on to users](/actors/publishing/monetize/pay-per-event#platform-usage-costs). - Set the minimal cost that users can choose as max cost per run. 1. In the **Primary event** step, select the event that best represents the main value of your Actor. By default, the dataset event or the only existing event is used. 1. In the **Review** step, verify the final pricing for your Actor before confirming. @@ -65,13 +65,13 @@ You can make major monetization changes to each Actor only **once per month**. A ## Make your Actor eligible for agentic payments -Agentic payments let AI agents discover, run, and pay for your Actor without an Apify account, using protocols such as [x402](/platform/integrations/x402) and [Skyfire](/platform/integrations/skyfire). Eligible Actors are flagged with `allowsAgenticUsers=true` and surface in agentic discovery, for example when [searching the store via API](https://docs.apify.com/api/v2#/reference/store/store-actors-collection/get-list-of-actors-in-store) with `allowsAgenticUsers=true`. +Agentic payments let AI agents discover, run, and pay for your Actor without an Apify account, using protocols such as [x402](/integrations/x402) and [Skyfire](/integrations/skyfire). Eligible Actors are flagged with `allowsAgenticUsers=true` and surface in agentic discovery, for example when [searching the store via API](https://docs.apify.com/api/v2#/reference/store/store-actors-collection/get-list-of-actors-in-store) with `allowsAgenticUsers=true`. To be eligible for agentic payments, your Actor must: -- Use the [pay per event](/platform/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. -- Run with [limited permissions](/platform/actors/development/permissions). Actors that request full permissions are excluded. -- Not use [Standby](/platform/actors/running/standby) mode for now. Standby support is coming later. +- Use the [pay per event](/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. +- Run with [limited permissions](/actors/development/permissions). Actors that request full permissions are excluded. +- Not use [Standby](/actors/running/standby) mode for now. Standby support is coming later. Actors that meet these criteria become available to agentic users automatically - there is no separate opt-in. @@ -99,7 +99,7 @@ If the monthly profit does not meet these thresholds, as per the [Terms & Condit When monetizing your Actor, you might want to limit features or usage for users on the Apify free plan. If you choose to do this, you _must_ handle it transparently: - Communicate upfront: Clearly state any limitations in your Actor's `README` and input schema. Users should know about restrictions _before_ they run the Actor. -- Graceful exits: If a free user hits a limit, don't crash the Actor or return a system error. Instead, exit gracefully with a clear [status message](/platform/actors/development/programming-interface/status-messages#communicating-limitations) explaining the limit (e.g., "Free tier limit reached"). +- Graceful exits: If a free user hits a limit, don't crash the Actor or return a system error. Instead, exit gracefully with a clear [status message](/actors/development/programming-interface/status-messages#communicating-limitations) explaining the limit (e.g., "Free tier limit reached"). - Avoid confusion: Never make a policy restriction look like a bug or platform error. ## Actor analytics diff --git a/sources/platform/actors/publishing/monetize/pay_per_event.mdx b/sources/platform/actors/publishing/monetize/pay_per_event.mdx index d602db7fd2..143868fc90 100644 --- a/sources/platform/actors/publishing/monetize/pay_per_event.mdx +++ b/sources/platform/actors/publishing/monetize/pay_per_event.mdx @@ -42,7 +42,7 @@ Your profit is calculated from the mentioned formula: where: - _Revenue_: The amount charged for events via the PPE charging API or through JS/Python SDK. You receive 80% of this revenue. -- _Platform costs_: The underlying platform usage costs for running the Actor. For more details, visit the [Computing your costs for PPE Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section. +- _Platform costs_: The underlying platform usage costs for running the Actor. For more details, visit the [Computing your costs for PPE Actors](/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section. Only revenue and cost for Apify customers on paid plans are taken into consideration when computing your profit. Users on free plans are not reflected there. @@ -77,7 +77,7 @@ Charging platform usage separately is less transparent for users and may discour ::: -To pass platform usage costs on to users, in the **Actor pricing** step of the [monetization setup](/platform/actors/publishing/monetize#set-up-monetization), switch on the **Pay per event + usage** toggle. +To pass platform usage costs on to users, in the **Actor pricing** step of the [monetization setup](/actors/publishing/monetize#set-up-monetization), switch on the **Pay per event + usage** toggle. Turning this option on takes 14 days to take effect. However, you can turn it off immediately, as it is a positive change for users. @@ -89,7 +89,7 @@ The `eventChargeLimitReached` property checks if the user's limit allows for ano :::info ACTOR_MAX_TOTAL_CHARGE_USD environment variable -For pay-per-event Actors, users set a spending limit through Apify Console. This limit is available in your Actor code as the `ACTOR_MAX_TOTAL_CHARGE_USD` [environment variable](/platform/actors/development/programming-interface/environment-variables), which contains the user's maximum cost. +For pay-per-event Actors, users set a spending limit through Apify Console. This limit is available in your Actor code as the `ACTOR_MAX_TOTAL_CHARGE_USD` [environment variable](/actors/development/programming-interface/environment-variables), which contains the user's maximum cost. The Apify SDK's `ChargeResult` respects the user set limit already. ::: @@ -169,7 +169,7 @@ Apify recommends using the synthetic Actor start event in all Actors. It benefit Starting an Actor takes time, and creates additional cost for the Actor creator, because the profit equals revenue minus platform costs. -One of the options to charge for the time spent on starting the Actor is to charge an “Actor start” event. Unfortunately, this makes your Actor comparably expensive with other tools on the market (outside of [Apify Store](/platform/console/store)) that do not incur this startup cost. +One of the options to charge for the time spent on starting the Actor is to charge an “Actor start” event. Unfortunately, this makes your Actor comparably expensive with other tools on the market (outside of [Apify Store](/console/store)) that do not incur this startup cost. We want to make it easier for Actor creators to stay competitive, but also help them to be profitable. Therefore, we have the Apify Actor synthetic start event `apify-actor-start`. This event is enabled by default for all new PPE Actors, and when you use it Apify will cover the compute unit cost of the first 5 seconds of every Actor run. @@ -194,7 +194,7 @@ For new Actors, the `apify-actor-start` event is added automatically. For existing Actors, you can add this event manually: -1. Access your Actor's [monetization setup](/platform/actors/publishing/monetize#set-up-monetization). +1. Access your Actor's [monetization setup](/actors/publishing/monetize#set-up-monetization). 1. In the **Actor pricing** step, under **Event name**, add `apify-actor-start`. 1. Complete the remaining event details: title, description, and price. @@ -219,7 +219,7 @@ This event charges users automatically for each default dataset item, requiring ### Set memory limits -Set memory limits using `minMemoryMbytes` and `maxMemoryMbytes` in your [`actor.json`](https://docs.apify.com/platform/actors/development/actor-definition/actor-json) file to control platform usage costs. +Set memory limits using `minMemoryMbytes` and `maxMemoryMbytes` in your [`actor.json`](https://docs.apify.com/actors/development/actor-definition/actor-json) file to control platform usage costs. ```json { @@ -426,7 +426,7 @@ Fixed pricing is simpler for users to predict, while usage-based pricing more ac Your profit and costs are computed _only from the first two users_ since they are on Apify paid plans. -The platform usage costs are just examples, but you can see the actual costs in the [Computing your costs for PPE Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section. +The platform usage costs are just examples, but you can see the actual costs in the [Computing your costs for PPE Actors](/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section. ### Revenue breakdown diff --git a/sources/platform/actors/publishing/monetize/rental.mdx b/sources/platform/actors/publishing/monetize/rental.mdx index 0724c0174d..467b3bebcf 100644 --- a/sources/platform/actors/publishing/monetize/rental.mdx +++ b/sources/platform/actors/publishing/monetize/rental.mdx @@ -35,7 +35,7 @@ The rental model, while easy to set up, is less profitable because its pricing d ### AI compatibility limitations -The growing limitation is AI compatibility. [Apify's MCP server](/platform/integrations/mcp) explicitly excludes rental Actors from search results, making them invisible to AI systems that dynamically select and execute tools. This significantly reduces your Actor's discoverability in AI workflows. +The growing limitation is AI compatibility. [Apify's MCP server](/integrations/mcp) explicitly excludes rental Actors from search results, making them invisible to AI systems that dynamically select and execute tools. This significantly reduces your Actor's discoverability in AI workflows. ## Example of a rental pricing model diff --git a/sources/platform/actors/publishing/publish-task.mdx b/sources/platform/actors/publishing/publish-task.mdx index 1841f33e03..dbb59b7f63 100644 --- a/sources/platform/actors/publishing/publish-task.mdx +++ b/sources/platform/actors/publishing/publish-task.mdx @@ -5,7 +5,7 @@ slug: /actors/publishing/publish-task sidebar_position: 2 --- -[Actor tasks](/platform/actors/running/tasks) are shareable, pre-configured inputs for your Actors. [Publishing a task](#publish-your-tasks) creates a public landing page that shows what the Actor does, what inputs it uses, and what output to expect. Public tasks also appear in your Actor's **Examples** tab, which helps users discover your Actor through search engines and AI agents. For monetized Actors, this can lead to more page views, more runs, and more revenue. +[Actor tasks](/actors/running/tasks) are shareable, pre-configured inputs for your Actors. [Publishing a task](#publish-your-tasks) creates a public landing page that shows what the Actor does, what inputs it uses, and what output to expect. Public tasks also appear in your Actor's **Examples** tab, which helps users discover your Actor through search engines and AI agents. For monetized Actors, this can lead to more page views, more runs, and more revenue. You can create up to 50 tasks per Actor. @@ -14,8 +14,8 @@ You can create up to 50 tasks per Actor. Before you publish a task, make sure you have: - A [published Actor](./publish.mdx) that you own or maintain. -- A [saved task](/platform/actors/running/tasks) with a complete input configuration. -- An [input schema](/platform/actors/development/actor-definition/input-schema) and at least one [dataset schema view](/platform/actors/development/actor-definition/dataset-schema) defined on the Actor. +- A [saved task](/actors/running/tasks) with a complete input configuration. +- An [input schema](/actors/development/actor-definition/input-schema) and at least one [dataset schema view](/actors/development/actor-definition/dataset-schema) defined on the Actor. ## What tasks to publish @@ -111,7 +111,7 @@ Use this section to: :::info Secret fields are protected automatically -All input fields with `"isSecret": true` in the Actor's [input schema](/platform/actors/development/actor-definition/input-schema) are automatically masked and never shown on the landing page. Before publishing, confirm sensitive fields are marked as secret. +All input fields with `"isSecret": true` in the Actor's [input schema](/actors/development/actor-definition/input-schema) are automatically masked and never shown on the landing page. Before publishing, confirm sensitive fields are marked as secret. ::: @@ -121,7 +121,7 @@ The Dataset schema section selects which view of the Actor's dataset is rendered ![Dataset schema view selection.](./images/public-tasks/task-dataset-schema.webp) -For more on configuring views, see [Dataset schema](/platform/actors/development/actor-definition/dataset-schema). +For more on configuring views, see [Dataset schema](/actors/development/actor-definition/dataset-schema). ## Task landing page diff --git a/sources/platform/actors/publishing/publish.mdx b/sources/platform/actors/publishing/publish.mdx index f3e2d3c109..c6db8d6b61 100644 --- a/sources/platform/actors/publishing/publish.mdx +++ b/sources/platform/actors/publishing/publish.mdx @@ -59,6 +59,6 @@ Note that the complexity of your README should match the complexity of your Acto ## Source code visibility -When you publish an Actor, its source code files and non-secret [environment variables](/platform/actors/development/programming-interface/environment-variables) are publicly visible by default on the Actor detail page. +When you publish an Actor, its source code files and non-secret [environment variables](/actors/development/programming-interface/environment-variables) are publicly visible by default on the Actor detail page. To hide them, go to your Actor's **Settings** tab in Apify Console and check **Hide source files from Actor detail**. Secret environment variables are never exposed regardless of this setting. diff --git a/sources/platform/actors/publishing/quality_score.mdx b/sources/platform/actors/publishing/quality_score.mdx index 6ae2ead575..19133413ff 100644 --- a/sources/platform/actors/publishing/quality_score.mdx +++ b/sources/platform/actors/publishing/quality_score.mdx @@ -14,7 +14,7 @@ The Actor quality score is a metric that evaluates your Actor's performance acro Search ranking evaluates parameters similar to those in the quality score. As a result, the two correlate strongly across Apify search surfaces: - _Apify Store search_ at [apify.com/store](https://apify.com/store). -- The _Apify MCP server_ `search-actors` tool used by external AI agents. See [Apify MCP server](/platform/integrations/mcp). +- The _Apify MCP server_ `search-actors` tool used by external AI agents. See [Apify MCP server](/integrations/mcp). Actors with higher quality scores tend to rank higher on both surfaces, though no specific position is guaranteed. Search in Apify Console is personalized to each individual user, so the same query can return different Actors than the public Store - quality score still correlates with ranking, the order is just adjusted per user. See [How Apify Store search works](/academy/actor-marketing-playbook/store-basics/how-store-works#how-apify-store-search-works) for the publisher-facing guidance. @@ -53,9 +53,9 @@ These are the quality categories: ### Reliability -Reliability measures your Actor's operational stability and consistency. A reliable Actor maintains high run success rates and passes automated quality assurance tests. Poor reliability significantly impacts your quality score. For more information on testing requirements, see [Automated Testing](https://docs.apify.com/platform/actors/publishing/test). +Reliability measures your Actor's operational stability and consistency. A reliable Actor maintains high run success rates and passes automated quality assurance tests. Poor reliability significantly impacts your quality score. For more information on testing requirements, see [Automated Testing](https://docs.apify.com/actors/publishing/test). -Implementing an [input schema](https://docs.apify.com/platform/actors/development/actor-definition/input-schema) helps prevent runtime failures by validating user input before execution begins, reducing errors caused by invalid or malformed inputs. +Implementing an [input schema](https://docs.apify.com/actors/development/actor-definition/input-schema) helps prevent runtime failures by validating user input before execution begins, reducing errors caused by invalid or malformed inputs. ### Popularity @@ -71,7 +71,7 @@ Ease of use evaluates how quickly users can understand and successfully run your ### Pricing transparency -Pricing transparency evaluates how clearly users can understand and predict the costs of running your Actor. Transparent pricing models help users make informed decisions and budget accordingly. The [Pay per event (PPE)](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) monetization model provides predictable, event-based pricing that makes costs explicit and easier to estimate. +Pricing transparency evaluates how clearly users can understand and predict the costs of running your Actor. Transparent pricing models help users make informed decisions and budget accordingly. The [Pay per event (PPE)](https://docs.apify.com/actors/publishing/monetize/pay-per-event) monetization model provides predictable, event-based pricing that makes costs explicit and easier to estimate. Consider offering discounts for Bronze, Silver, and Gold subscription tiers. These incentives reward committed platform users and can increase your Actor's adoption among engaged customers. @@ -89,4 +89,4 @@ Developers with a proven track record of publishing successful Actors receive re ### Congruency -Congruency measures the consistency and coherence across your Actor's components. A well-designed Actor maintains alignment between its title, description, documentation, and schemas. Ensure that your [input schema](https://docs.apify.com/platform/actors/development/actor-definition/input-schema), [dataset schema](https://docs.apify.com/platform/actors/development/actor-definition/dataset-schema), [key-value store schema](https://docs.apify.com/platform/actors/development/actor-definition/key-value-store-schema), and README documentation all reflect consistent terminology and accurately describe the Actor's behavior. This coherence reduces user confusion and improves the overall experience. +Congruency measures the consistency and coherence across your Actor's components. A well-designed Actor maintains alignment between its title, description, documentation, and schemas. Ensure that your [input schema](https://docs.apify.com/actors/development/actor-definition/input-schema), [dataset schema](https://docs.apify.com/actors/development/actor-definition/dataset-schema), [key-value store schema](https://docs.apify.com/actors/development/actor-definition/key-value-store-schema), and README documentation all reflect consistent terminology and accurately describe the Actor's behavior. This coherence reduces user confusion and improves the overall experience. diff --git a/sources/platform/actors/publishing/testing.mdx b/sources/platform/actors/publishing/testing.mdx index fe6f0aa59d..67c5a942a0 100644 --- a/sources/platform/actors/publishing/testing.mdx +++ b/sources/platform/actors/publishing/testing.mdx @@ -12,7 +12,7 @@ This helps us to flag Actors that temporarily don't work as expected `under main ## How we test -The test runs the Actor with its default input (defined by the [**prefill**](https://docs.apify.com/platform/actors/development/actor-definition/input-schema/specification/v1#prefill-vs-default-vs-required) option in the input schema file) +The test runs the Actor with its default input (defined by the [**prefill**](https://docs.apify.com/actors/development/actor-definition/input-schema/specification/v1#prefill-vs-default-vs-required) option in the input schema file) and expects it to finish with a **Succeeded** status and non-empty default dataset within 5 minutes of the beginning of the run. ![Actor page](./images/actor-test.webp) diff --git a/sources/platform/actors/running/actor_standby.md b/sources/platform/actors/running/actor_standby.md index 9cdfdc2454..bd87983cb4 100644 --- a/sources/platform/actors/running/actor_standby.md +++ b/sources/platform/actors/running/actor_standby.md @@ -47,9 +47,9 @@ This approach can be useful if you cannot modify the request headers. ``` :::tip Scoped tokens -You can use [scoped tokens](/platform/integrations/api#limited-permissions) to send standby requests. This is useful for allowing third-party services to interact with your Actor without granting access to your entire account. +You can use [scoped tokens](/integrations/api#limited-permissions) to send standby requests. This is useful for allowing third-party services to interact with your Actor without granting access to your entire account. -However, [restricting what an Actor can access](/platform/integrations/api#restricted-access-restrict-what-actors-can-access-using-the-scope-of-this-actor) using a scoped token is not supported when running in Standby mode. +However, [restricting what an Actor can access](/integrations/api#restricted-access-restrict-what-actors-can-access-using-the-scope-of-this-actor) using a scoped token is not supported when running in Standby mode. ::: ## Can I still run the Actor in normal mode diff --git a/sources/platform/images/schedules-actor-input.png b/sources/platform/actors/running/images/schedules-actor-input.png similarity index 100% rename from sources/platform/images/schedules-actor-input.png rename to sources/platform/actors/running/images/schedules-actor-input.png diff --git a/sources/platform/images/schedules-bulk-notifications.png b/sources/platform/actors/running/images/schedules-bulk-notifications.png similarity index 100% rename from sources/platform/images/schedules-bulk-notifications.png rename to sources/platform/actors/running/images/schedules-bulk-notifications.png diff --git a/sources/platform/images/schedules-overview.png b/sources/platform/actors/running/images/schedules-overview.png similarity index 100% rename from sources/platform/images/schedules-overview.png rename to sources/platform/actors/running/images/schedules-overview.png diff --git a/sources/platform/images/schedules-setup-tool.png b/sources/platform/actors/running/images/schedules-setup-tool.png similarity index 100% rename from sources/platform/images/schedules-setup-tool.png rename to sources/platform/actors/running/images/schedules-setup-tool.png diff --git a/sources/platform/images/schedules-task-input.png b/sources/platform/actors/running/images/schedules-task-input.png similarity index 100% rename from sources/platform/images/schedules-task-input.png rename to sources/platform/actors/running/images/schedules-task-input.png diff --git a/sources/platform/actors/running/input_and_output.md b/sources/platform/actors/running/input_and_output.md index 2d0b706555..bde08ae5a3 100644 --- a/sources/platform/actors/running/input_and_output.md +++ b/sources/platform/actors/running/input_and_output.md @@ -45,7 +45,7 @@ If the Actor is configured by developer to use [dynamic memory](../development/a An Actor can produce results in several places. Structured, tabular results are usually stored in the run's default (or additional) [Dataset](../../storage/dataset), while files and other unstructured data go to its [Key-value store](../../storage/key-value-store). Always read the Actor's README to learn what an Actor produces and where it stores it. For more details about storages, visit the [Storage](../../storage/index.md) section. -To describe where its results are and how to reach them, an Actor can define an [output schema](/platform/actors/development/actor-definition/output-schema). The platform uses this schema to automatically generate the Actor _output object_ - an immutable JSON object whose properties link to the run's results. The output object is defined solely by the output schema, not by the Actor's code, and the API returns it as the run's `output` property immediately when the run starts, without waiting for the run to finish or for the results to be produced. This makes it useful for previewing results, generating API examples, and building integrations. +To describe where its results are and how to reach them, an Actor can define an [output schema](/actors/development/actor-definition/output-schema). The platform uses this schema to automatically generate the Actor _output object_ - an immutable JSON object whose properties link to the run's results. The output object is defined solely by the output schema, not by the Actor's code, and the API returns it as the run's `output` property immediately when the run starts, without waiting for the run to finish or for the results to be produced. This makes it useful for previewing results, generating API examples, and building integrations. The output object is separate from the storages that hold the data: its properties point to results wherever they live, whether that's the dataset, the key-value store, or a URL exposed by the running Actor. diff --git a/sources/platform/monitoring/images/alerts.png b/sources/platform/actors/running/monitoring/images/alerts.png similarity index 100% rename from sources/platform/monitoring/images/alerts.png rename to sources/platform/actors/running/monitoring/images/alerts.png diff --git a/sources/platform/monitoring/images/daily-run-statuses.png b/sources/platform/actors/running/monitoring/images/daily-run-statuses.png similarity index 100% rename from sources/platform/monitoring/images/daily-run-statuses.png rename to sources/platform/actors/running/monitoring/images/daily-run-statuses.png diff --git a/sources/platform/monitoring/images/email-notification.png b/sources/platform/actors/running/monitoring/images/email-notification.png similarity index 100% rename from sources/platform/monitoring/images/email-notification.png rename to sources/platform/actors/running/monitoring/images/email-notification.png diff --git a/sources/platform/monitoring/images/in-app-notification.png b/sources/platform/actors/running/monitoring/images/in-app-notification.png similarity index 100% rename from sources/platform/monitoring/images/in-app-notification.png rename to sources/platform/actors/running/monitoring/images/in-app-notification.png diff --git a/sources/platform/monitoring/images/metric-options.png b/sources/platform/actors/running/monitoring/images/metric-options.png similarity index 100% rename from sources/platform/monitoring/images/metric-options.png rename to sources/platform/actors/running/monitoring/images/metric-options.png diff --git a/sources/platform/monitoring/images/monitoring.png b/sources/platform/actors/running/monitoring/images/monitoring.png similarity index 100% rename from sources/platform/monitoring/images/monitoring.png rename to sources/platform/actors/running/monitoring/images/monitoring.png diff --git a/sources/platform/monitoring/images/notifications.png b/sources/platform/actors/running/monitoring/images/notifications.png similarity index 100% rename from sources/platform/monitoring/images/notifications.png rename to sources/platform/actors/running/monitoring/images/notifications.png diff --git a/sources/platform/monitoring/images/run-statistics-chart.png b/sources/platform/actors/running/monitoring/images/run-statistics-chart.png similarity index 100% rename from sources/platform/monitoring/images/run-statistics-chart.png rename to sources/platform/actors/running/monitoring/images/run-statistics-chart.png diff --git a/sources/platform/monitoring/index.md b/sources/platform/actors/running/monitoring/index.md similarity index 90% rename from sources/platform/monitoring/index.md rename to sources/platform/actors/running/monitoring/index.md index 2b94d18481..cbea4bb739 100644 --- a/sources/platform/monitoring/index.md +++ b/sources/platform/actors/running/monitoring/index.md @@ -3,7 +3,7 @@ title: Monitoring description: Learn how to make sure your Actors and tasks perform as expected and retrieve correct results. Get alerts when jobs or their metrics fall short. sidebar_position: 12 category: guides -slug: /monitoring +slug: /actors/running/monitoring --- The web is continuously evolving, and so are the websites you interact with. If you implement Apify Actors or the data they provide into your daily workflows, you need to make sure that everything runs as expected. @@ -45,7 +45,7 @@ When you set up an alert, you have four choices for how you want the metrics to 3. **Alert, when run status is one of following** - This type of alert is checked only after the run finishes. It makes possible to track the status of your finished runs and send an alert if the run finishes in a state you do not expect. If your Actor runs very often and suddenly starts failing, you will receive a single alert after the first failed run in 1 minute, and then aggregated alert every 15 minutes. -4. **Alert for dataset field statistics** - If you have a [dataset schema](../actors/development/actor_definition/dataset_schema/validation.md) set up, then you can use the field statistics to set up an alert. You can use field statistics for example to track if some field is filled in all records, if some numeric value is too low/high (for example when tracking the price of a product over multiple sources), if the number of items in an array is too low/high (for example alert on Instagram Actor if post has a lot of comments) and many other tasks like these. +4. **Alert for dataset field statistics** - If you have a [dataset schema](/actors/development/actor-definition/dataset-schema/validation) set up, then you can use the field statistics to set up an alert. You can use field statistics for example to track if some field is filled in all records, if some numeric value is too low/high (for example when tracking the price of a product over multiple sources), if the number of items in an array is too low/high (for example alert on Instagram Actor if post has a lot of comments) and many other tasks like these. :::important @@ -104,7 +104,7 @@ These are just a few examples of what you can monitor. It's always recommended t ### Alternative solutions -For more complex monitoring, you can use the [monitoring suite](https://apify.com/apify/monitoring), which is a collection of [Apify Actors](../actors/index.mdx) that allows you to automate the monitoring of jobs you have running on the [Apify platform](https://apify.com). The monitoring suite offers some features that are not **currently** available in Apify Console, such as: +For more complex monitoring, you can use the [monitoring suite](https://apify.com/apify/monitoring), which is a collection of [Apify Actors](/actors) that allows you to automate the monitoring of jobs you have running on the [Apify platform](https://apify.com). The monitoring suite offers some features that are not **currently** available in Apify Console, such as: 1. Schema validation of the output 2. Duplicate checks in the output diff --git a/sources/platform/actors/running/runs_and_builds.md b/sources/platform/actors/running/runs_and_builds.md index aab1249697..07c8647d3b 100644 --- a/sources/platform/actors/running/runs_and_builds.md +++ b/sources/platform/actors/running/runs_and_builds.md @@ -145,4 +145,4 @@ Apify securely stores your ten most recent runs indefinitely, ensuring your reco ## Share -Share your Actor runs with other Apify users via the [access rights](../../collaboration/index.md) system. +Share your Actor runs with other Apify users via the [access rights](/account/collaboration) system. diff --git a/sources/platform/schedules.md b/sources/platform/actors/running/schedules.md similarity index 92% rename from sources/platform/schedules.md rename to sources/platform/actors/running/schedules.md index 7b9147c563..5862a2b801 100644 --- a/sources/platform/schedules.md +++ b/sources/platform/actors/running/schedules.md @@ -3,7 +3,7 @@ title: Schedules description: Learn how to automatically start your Actor and task runs and the basics of cron expressions. Set up and manage your schedules from Apify Console or via API. sidebar_position: 8 category: platform -slug: /schedules +slug: /actors/running/schedules --- Schedules allow you to run your Actors and tasks at specific times. You schedule the run frequency using [cron expressions](#cron-expressions). @@ -30,7 +30,7 @@ Each schedule can be associated with a maximum of _10_ Actors and _10_ Actor tas ## Set up a new schedule -Before setting up a new schedule, you should have the [Actor](./actors/index.mdx) or [task](./actors/running/tasks.md) you want to schedule prepared and tested. +Before setting up a new schedule, you should have the [Actor](/actors) or [task](/actors/running/tasks) you want to schedule prepared and tested. To schedule an Actor, you need to have run it at least once before. To run the Actor, navigate to the Actor's page through [Apify Console](https://console.apify.com/store), where you can configure and initiate the Actor's run with your preferred settings by clicking the **Start** button. After this initial run, you can then use Schedules to automate future runs. @@ -50,7 +50,7 @@ You can adjust how often your Actor or task runs using the [schedule setup tool] Next, you'll need to give the schedule something to run. This is where the Actor or task you prepared earlier comes in. Click on the **Add** dropdown and select whether you want to schedule an Actor or task. -If you're scheduling an Actor run, you'll be able to specify the Actor's [input](./actors/running/input_and_output.md) and running options like [build](./actors/development/builds_and_runs/builds.md), timeout, [memory](./actors/running/usage_and_resources.md). +If you're scheduling an Actor run, you'll be able to specify the Actor's [input](/actors/running/input-and-output) and running options like [build](/actors/development/builds-and-runs/builds), timeout, [memory](/actors/running/usage-and-resources). The **timeout** value is specified in seconds; a value of _0_ means there is no timeout, and the Actor runs until it finishes. If you don't provide an input, then the Actor's default input is used. If you provide an input with some fields missing, the missing fields are filled in with values from the default input. If input options are not provided, the default options values are used. @@ -65,13 +65,13 @@ To add more Actors or tasks, just repeat the process. You can disable or enable the schedule at any time using the **Disable**/**Enable** button on the schedule detail page. New schedules are created in _disabled_ state by default. -For integrations, you can also add a [webhook](/platform/integrations/webhooks) to your tasks, which will notify you (or perform an action of your choice) every time the task runs. +For integrations, you can also add a [webhook](/integrations/webhooks) to your tasks, which will notify you (or perform an action of your choice) every time the task runs. ### Apify API To create a new [schedule](/api/v2/schedules) using the Apify API, send a `POST` request to the [create schedule](/api/v2/schedules-post) endpoint. -You can find your [secret API token](./integrations/index.mdx) under the [API & Integrations](https://console.apify.com/settings/integrations) tab of your Apify account settings. +You can find your [secret API token](/integrations) under the [API & Integrations](https://console.apify.com/settings/integrations) tab of your Apify account settings. :::caution API authentication recommendations When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL ([more info](/api/v2#authentication)). diff --git a/sources/platform/actors/running/store/index.md b/sources/platform/actors/running/store/index.md index bb2a767f43..70d7e99b8f 100644 --- a/sources/platform/actors/running/store/index.md +++ b/sources/platform/actors/running/store/index.md @@ -10,7 +10,7 @@ toc_max_heading_level: 4 :::info Publishing and monetizing Actors -Anyone is welcome to [publish Actors](/platform/actors/publishing) in the store, and you can even [monetize your Actors](/platform/actors/publishing/monetize). For more information about how to monetize your Actor, best practices, SEO, and promotion tips and tricks, head over to the [Marketing checklist](/academy/actor-marketing-playbook/promote-your-actor/checklist) section of the Apify Developers Academy. +Anyone is welcome to [publish Actors](/actors/publishing) in the store, and you can even [monetize your Actors](/actors/publishing/monetize). For more information about how to monetize your Actor, best practices, SEO, and promotion tips and tricks, head over to the [Marketing checklist](/academy/actor-marketing-playbook/promote-your-actor/checklist) section of the Apify Developers Academy. ::: @@ -59,7 +59,7 @@ If charges seem incorrect, contact the Actor author or the Apify support team. Y ### Pay per usage -When you use a pay per usage Actor, you are only charged for the platform usage that the runs of this Actor generate. [Platform usage](../usage_and_resources.md) includes components such as compute units, operations on [storages](/platform/storage), and usage of [residential proxies](/platform/proxy/residential-proxy) or [SERPs](/platform/proxy/google-serp-proxy). +When you use a pay per usage Actor, you are only charged for the platform usage that the runs of this Actor generate. [Platform usage](../usage_and_resources.md) includes components such as compute units, operations on [storages](/storage), and usage of [residential proxies](/proxy/residential-proxy) or [SERPs](/proxy/google-serp-proxy). ![Pay for usage Actor example](../images/store/pay_per_usage_actor_example.png) diff --git a/sources/platform/actors/running/store/reviews.mdx b/sources/platform/actors/running/store/reviews.mdx index 4b4606a8f4..8f134202a8 100644 --- a/sources/platform/actors/running/store/reviews.mdx +++ b/sources/platform/actors/running/store/reviews.mdx @@ -26,7 +26,7 @@ To share your opinion of an Actor: - To only rate the Actor, use the star rating. - To rate and review the Actor, select **Write review**. -If you have a problem with the Actor that you're reviewing, consider [opening an issue](/platform/actors/running/actors-in-store#report-issues-with-actors). +If you have a problem with the Actor that you're reviewing, consider [opening an issue](/actors/running/actors-in-store#report-issues-with-actors). ### Edit a review diff --git a/sources/platform/actors/running/tasks.md b/sources/platform/actors/running/tasks.md index 734c57a8c1..a4b2752b88 100644 --- a/sources/platform/actors/running/tasks.md +++ b/sources/platform/actors/running/tasks.md @@ -6,7 +6,7 @@ slug: /actors/running/tasks sidebar_label: Tasks --- -Actor tasks let you create multiple reusable configurations of a single Actor, adapted for specific use cases. For example, you can create one [_Web Scraper_](https://apify.com/apify/web-scraper) configuration (task) that scrapes the latest reviews from [IMDb](https://www.imdb.com/), another that scrapes nike.com for the latest sneakers, and a third that scrapes your competitor's e-shop. You can then use and reuse these configurations directly from [Apify Console](https://console.apify.com/actors/tasks), [Schedules](../../schedules.md), or [API](/api/v2/actor-task-runs-post). +Actor tasks let you create multiple reusable configurations of a single Actor, adapted for specific use cases. For example, you can create one [_Web Scraper_](https://apify.com/apify/web-scraper) configuration (task) that scrapes the latest reviews from [IMDb](https://www.imdb.com/), another that scrapes nike.com for the latest sneakers, and a third that scrapes your competitor's e-shop. You can then use and reuse these configurations directly from [Apify Console](https://console.apify.com/actors/tasks), [Schedules](/actors/running/schedules), or [API](/api/v2/actor-task-runs-post). You can find all your tasks in the [Apify Console](https://console.apify.com/actors/tasks). @@ -42,11 +42,11 @@ Or using the **Start** button positioned following the input configuration. You can also run tasks using: -- [Schedules](../../schedules.md). +- [Schedules](/actors/running/schedules). - Directly via the [Apify API](/api/v2/actor-task-runs-post). - The [JavaScript API client](/api/client/js/reference/class/TaskClient). - The [Python API client](/api/client/python/reference/class/TaskClient). ## Share -Like any other resource, you can share your Actor tasks with other Apify users via the [access rights](../../collaboration/index.md) system. +Like any other resource, you can share your Actor tasks with other Apify users via the [access rights](/account/collaboration) system. diff --git a/sources/platform/console/store.md b/sources/platform/console/store.md index 256ce435da..ad1d1e3e12 100644 --- a/sources/platform/console/store.md +++ b/sources/platform/console/store.md @@ -20,6 +20,6 @@ Once you select an Actor from the store, you'll be directed to its specific page ## Search -Search results in Apify Console are personalized to each individual user, so the same query can return different Actors than the public Store at [apify.com/store](https://apify.com/store). Both Console and the public Store rank Actors using parameters similar to those in the [Actor quality score](/platform/actors/publishing/quality-score). +Search results in Apify Console are personalized to each individual user, so the same query can return different Actors than the public Store at [apify.com/store](https://apify.com/store). Both Console and the public Store rank Actors using parameters similar to those in the [Actor quality score](/actors/publishing/quality-score). -For more information, see [Actors in Store](/sources/platform/actors/running/store/index.md). +For more information, see [Actors in Store](/actors/running/actors-in-store). diff --git a/sources/platform/integrations/agent-onboarding.md b/sources/platform/get-started/agent-onboarding.md similarity index 87% rename from sources/platform/integrations/agent-onboarding.md rename to sources/platform/get-started/agent-onboarding.md index 851cbecce1..207f944976 100644 --- a/sources/platform/integrations/agent-onboarding.md +++ b/sources/platform/get-started/agent-onboarding.md @@ -1,10 +1,12 @@ --- title: Apify for AI agents -sidebar_label: Apify for AI agents -sidebar_position: 2 +sidebar_label: Agent onboarding +sidebar_position: 1 description: Connect your AI agent to the Apify platform - scrape the web, run Actors, and retrieve structured data via MCP, Agent Skills, client libraries, or the REST API. -slug: /integrations/agent-onboarding +slug: /get-started/agent-onboarding toc_max_heading_level: 3 +pagination_next: null +pagination_prev: null --- import Tabs from '@theme/Tabs'; @@ -17,8 +19,8 @@ Connect your AI agent or application to Apify - the platform for web scraping, d - _Actors_ - Serverless cloud programs that perform scraping, crawling, or automation tasks. Thousands of ready-made Actors are available in [Apify Store](https://apify.com/store). - _Datasets_ - Append-only storage for structured results. Every Actor run creates a default dataset. Export as JSON, CSV, Excel, XML, or RSS. -- _API_ - RESTful API at `https://api.apify.com/v2` for all platform operations. Also accessible via [MCP](/platform/integrations/mcp), [CLI](/cli), and client libraries. -- _MCP connectors_ - When you build an Actor that needs to act on a user's third-party accounts (Notion, Slack, GitHub, and others), use [MCP connectors](/platform/integrations/mcp-connectors) to receive connector IDs as input instead of asking users for raw credentials. +- _API_ - RESTful API at `https://api.apify.com/v2` for all platform operations. Also accessible via [MCP](/integrations/mcp), [CLI](/cli), and client libraries. +- _MCP connectors_ - When you build an Actor that needs to act on a user's third-party accounts (Notion, Slack, GitHub, and others), use [MCP connectors](/integrations/mcp-connectors) to receive connector IDs as input instead of asking users for raw credentials. ## Prerequisites @@ -39,7 +41,7 @@ After [connecting the MCP server](#mcp-server) to your AI assistant, ask: Use Apify's RAG Web Browser to find the top 3 pages about Apify documentation, then summarize. ``` -Your agent calls [`search-actors`](/platform/integrations/mcp#available-tools), [`call-actor`](/platform/integrations/mcp#available-tools), and reads the resulting dataset items - all through MCP, no code required. +Your agent calls [`search-actors`](/integrations/mcp#available-tools), [`call-actor`](/integrations/mcp#available-tools), and reads the resulting dataset items - all through MCP, no code required. @@ -92,7 +94,7 @@ When an agent calls Actors automatically, set run limits to prevent surprise bil - `timeout` (seconds) - cap how long a single run can last. - `maxTotalChargeUsd` - cap total run cost for pay-per-event Actors. -See [Usage and resources](/platform/actors/running/usage-and-resources) and [Billing](/platform/console/billing) for details. +See [Usage and resources](/actors/running/usage-and-resources) and [Billing](/account/billing) for details. ::: @@ -107,7 +109,7 @@ See [Usage and resources](/platform/actors/running/usage-and-resources) and [Bil ### MCP server -The [Apify MCP server](/platform/integrations/mcp) connects your agent to the full Apify platform via the [Model Context Protocol](https://modelcontextprotocol.io/). No local installation needed for remote-capable clients. +The [Apify MCP server](/integrations/mcp) connects your agent to the full Apify platform via the [Model Context Protocol](https://modelcontextprotocol.io/). No local installation needed for remote-capable clients. :::tip Free exploration @@ -153,7 +155,7 @@ For clients that only support local MCP servers, for example Claude Desktop. 1. Replace `YOUR_TOKEN` with your API token and restart the client. -For client-specific setup instructions, use the [MCP Configurator](https://mcp.apify.com) which generates ready-to-paste configs. For details, see the [MCP server documentation](/platform/integrations/mcp). +For client-specific setup instructions, use the [MCP Configurator](https://mcp.apify.com) which generates ready-to-paste configs. For details, see the [MCP server documentation](/integrations/mcp). ### API client @@ -261,7 +263,7 @@ For HTTP-native integrations or languages without a dedicated client. Base URL: The sync endpoint ([`run-sync-get-dataset-items`](/api/v2/act-run-sync-get-dataset-items-post)) runs an Actor and returns results in a single request (waits up to 5 minutes). Use [async endpoints](/api/v2/act-runs-post) for longer runs. -For runs that take longer than the sync timeout, prefer [webhooks](/platform/integrations/webhooks) over polling - Apify will POST a notification to your URL when the run finishes, avoiding wasted requests. +For runs that take longer than the sync timeout, prefer [webhooks](/integrations/webhooks) over polling - Apify will POST a notification to your URL when the run finishes, avoiding wasted requests. Full reference: [Apify API v2](/api/v2). @@ -290,7 +292,7 @@ Apify documentation is available in formats optimized for programmatic consumpti | Resource | How to access | | :--- | :--- | -| Specific doc page | Append `.md` to any docs URL (for example, `docs.apify.com/platform/actors.md`) | +| Specific doc page | Append `.md` to any docs URL (for example, `docs.apify.com/actors.md`) | | Specific doc page (alt) | Request with `Accept: text/markdown` header | | Docs index | [docs.apify.com/llms.txt](https://docs.apify.com/llms.txt) | | Full docs (large) | [docs.apify.com/llms-full.txt](https://docs.apify.com/llms-full.txt) | @@ -301,10 +303,10 @@ For targeted lookups, prefer `.md` URLs for specific pages or the MCP docs tools ## Useful resources -- [MCP server integration](/platform/integrations/mcp) - Tool customization, dynamic Actor discovery, and advanced configuration +- [MCP server integration](/integrations/mcp) - Tool customization, dynamic Actor discovery, and advanced configuration - [CLI documentation](/cli) - Complete command reference - [API reference](/api/v2) - All REST API endpoints - [API client for JavaScript](https://docs.apify.com/api/client/js) | [for Python](https://docs.apify.com/api/client/python) - Client libraries -- [Storage documentation](/platform/storage) - Datasets, key-value stores, and request queues -- [Build with AI](/platform/actors/development) - Build and deploy your first Actor -- [Framework integrations](./ai/crewai.md) - CrewAI, LangChain, LlamaIndex, and more +- [Storage documentation](/storage) - Datasets, key-value stores, and request queues +- [Build with AI](/actors/development) - Build and deploy your first Actor +- [Framework integrations](../integrations/ai/crewai.md) - CrewAI, LangChain, LlamaIndex, and more diff --git a/sources/platform/get-started/building/_category_.json b/sources/platform/get-started/building/_category_.json new file mode 100644 index 0000000000..588c9544ca --- /dev/null +++ b/sources/platform/get-started/building/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "Build", + "position": 2, + "collapsed": false +} diff --git a/sources/platform/actors/development/quick-start/build_with_ai.md b/sources/platform/get-started/building/build-with-ai.md similarity index 93% rename from sources/platform/actors/development/quick-start/build_with_ai.md rename to sources/platform/get-started/building/build-with-ai.md index ba93e82aaa..6547073daa 100644 --- a/sources/platform/actors/development/quick-start/build_with_ai.md +++ b/sources/platform/get-started/building/build-with-ai.md @@ -3,8 +3,10 @@ title: Build Actors with AI sidebar_position: 3 sidebar_label: Build with AI description: Build new Actors or improve existing ones using AI coding tools by providing the right context, prompts, Agent Skills, and the Apify MCP server. -slug: /actors/development/quick-start/build-with-ai +slug: /get-started/build-with-ai toc_max_heading_level: 4 +pagination_next: null +pagination_prev: null --- import { AGENTS_PROMPT } from "@site/src/utils/agents-prompt"; @@ -17,8 +19,8 @@ This guide provides best practices for building new Actors or improving existing :::tip Different goal? -- _Building and deploying AI agents as Actors on Apify?_ See [Develop AI agents on Apify](/platform/actors/development/quick-start/develop-ai-agents) for the full stack - templates, sandboxes, LLM access, and monetization. -- _Connecting an external AI agent to Apify?_ See [Apify for AI agents](/platform/integrations/agent-onboarding) for MCP, Agent Skills, client libraries, and the REST API. +- _Building and deploying AI agents as Actors on Apify?_ See [Develop AI agents on Apify](/get-started/develop-ai-agents) for the full stack - templates, sandboxes, LLM access, and monetization. +- _Connecting an external AI agent to Apify?_ See [Apify for AI agents](/get-started/agent-onboarding) for MCP, Agent Skills, client libraries, and the REST API. ::: @@ -144,7 +146,7 @@ claude mcp add apify "https://mcp.apify.com/?tools=docs" -t http Every page in the Apify documentation has a **Copy for LLM** button. Use it to add more context to your AI assistant, or even open the page in ChatGPT, Claude, or Perplexity and ask additional questions. -![Page from the Apify documentation with the Copy for LLM button highlighted](./images/copy-for-llm-button.svg) +![Page from the Apify documentation with the Copy for LLM button highlighted](../images/copy-for-llm-button.svg) ## Use `/llms.txt` files @@ -157,7 +159,7 @@ The entire Apify documentation is available in Markdown format for use with LLMs Add `.md` to any documentation page URL to view its Markdown source. -Example: `https://docs.apify.com/platform/actors` > `https://docs.apify.com/platform/actors.md` +Example: `https://docs.apify.com/actors` > `https://docs.apify.com/actors.md` ::: diff --git a/sources/platform/actors/development/quick-start/develop_ai_agents.md b/sources/platform/get-started/building/develop-ai-agents.md similarity index 84% rename from sources/platform/actors/development/quick-start/develop_ai_agents.md rename to sources/platform/get-started/building/develop-ai-agents.md index 0003e24f43..70e79d4e52 100644 --- a/sources/platform/actors/development/quick-start/develop_ai_agents.md +++ b/sources/platform/get-started/building/develop-ai-agents.md @@ -3,7 +3,9 @@ title: Develop AI agents on Apify description: Build and deploy AI agents on Apify with framework templates, sandboxes, OpenRouter for LLM access, and pay-per-event pricing. sidebar_position: 4.0 sidebar_label: Develop AI agents -slug: /actors/development/quick-start/develop-ai-agents +slug: /get-started/develop-ai-agents +pagination_next: null +pagination_prev: null --- The Apify platform provides everything you need to build, test, and deploy AI agents. This page walks you through the complete toolkit: templates, sandbox code execution, LLM access through OpenRouter, pay-per-event monetization, and deployment to [Apify Store](https://apify.com/store). @@ -18,7 +20,7 @@ This page covers: :::note Build with AI -Looking to use AI coding assistants (Claude Code, Cursor, GitHub Copilot) to help you develop Actors? See [Build Actors with AI](/platform/actors/development/quick-start/build-with-ai). +Looking to use AI coding assistants (Claude Code, Cursor, GitHub Copilot) to help you develop Actors? See [Build Actors with AI](/get-started/build-with-ai). ::: @@ -26,7 +28,7 @@ Looking to use AI coding assistants (Claude Code, Cursor, GitHub Copilot) to hel - An [Apify account](https://console.apify.com/sign-up). - The [Apify CLI](/cli/docs/installation) installed. -- Your `APIFY_TOKEN` environment variable set. See [API token](/platform/integrations/api#api-token) for details. +- Your `APIFY_TOKEN` environment variable set. See [API token](/integrations/api#api-token) for details. ## Start from a template @@ -80,7 +82,7 @@ AI Sandbox runs on a Debian image with Node.js version 24 and Python 3.11 pre-in ## Connect to user services with MCP connectors -If your agent needs to act on a user's third-party accounts - posting to Slack, writing to Notion, querying GitHub - use [MCP connectors](/platform/integrations/mcp-connectors). The user authorizes each service once in their account settings, and your Actor receives a connector ID as input. Your Actor uses its Apify run token to reach the MCP Proxy; the third-party service credential stored in the connector stays server-side and never enters the Actor. Declare which services your Actor accepts in the input schema with `resourceType: "mcpConnector"`. See [Build Actors with MCP connectors](/platform/integrations/mcp-connectors/use-in-actors) for the full schema and code samples. +If your agent needs to act on a user's third-party accounts - posting to Slack, writing to Notion, querying GitHub - use [MCP connectors](/integrations/mcp-connectors). The user authorizes each service once in their account settings, and your Actor receives a connector ID as input. Your Actor uses its Apify run token to reach the MCP Proxy; the third-party service credential stored in the connector stays server-side and never enters the Actor. Declare which services your Actor accepts in the input schema with `resourceType: "mcpConnector"`. See [Build Actors with MCP connectors](/integrations/mcp-connectors/use-in-actors) for the full schema and code samples. ## Access LLMs with OpenRouter @@ -120,7 +122,7 @@ Pay-per-event pricing can charge users per token. To do this, extract token coun ## Monetize with pay-per-event pricing -[Pay-per-event (PPE)](/platform/actors/publishing/monetize/pay-per-event) pricing lets you charge users for specific actions your agent performs. Use `Actor.charge()` from the [JavaScript SDK](/sdk/js/reference/class/Actor#charge) or [Python SDK](/sdk/python/reference/class/Actor#charge) to bill users for events like API calls, generated results, or token usage. +[Pay-per-event (PPE)](/actors/publishing/monetize/pay-per-event) pricing lets you charge users for specific actions your agent performs. Use `Actor.charge()` from the [JavaScript SDK](/sdk/js/reference/class/Actor#charge) or [Python SDK](/sdk/python/reference/class/Actor#charge) to bill users for events like API calls, generated results, or token usage. ### PPE for AI agents @@ -141,7 +143,7 @@ If an Actor's net profit goes negative (for example, from free-tier users consum ::: -For detailed pricing guidance, see the [pay-per-event documentation](/platform/actors/publishing/monetize/pay-per-event). +For detailed pricing guidance, see the [pay-per-event documentation](/actors/publishing/monetize/pay-per-event). ## Deploy to Apify @@ -153,8 +155,8 @@ apify push This builds and deploys your Actor. Once deployed, you can: -- Publish to Apify Store - make your agent available to other users and start earning with PPE pricing. See the [publishing documentation](/platform/actors/publishing). +- Publish to Apify Store - make your agent available to other users and start earning with PPE pricing. See the [publishing documentation](/actors/publishing). - Run via API - trigger your agent programmatically through the [Apify API](/api/v2). - Set up schedules - run your agent on a recurring schedule. -For more deployment options, see the [deployment documentation](/platform/actors/development/deployment). +For more deployment options, see the [deployment documentation](/actors/development/deployment). diff --git a/sources/platform/actors/development/quick-start/start_locally.md b/sources/platform/get-started/building/locally.md similarity index 86% rename from sources/platform/actors/development/quick-start/start_locally.md rename to sources/platform/get-started/building/locally.md index 82ccc5d4a3..37dba9c4a2 100644 --- a/sources/platform/actors/development/quick-start/start_locally.md +++ b/sources/platform/get-started/building/locally.md @@ -3,7 +3,9 @@ title: Local Actor development sidebar_label: Local development sidebar_position: 1 description: Create your first Actor locally using the Apify CLI, configure its input and storage, then deploy it to the Apify platform to run in the cloud. -slug: /actors/development/quick-start/locally +slug: /get-started/locally +pagination_next: null +pagination_prev: null --- import PromptButton from "@site/src/components/PromptButton"; @@ -78,7 +80,7 @@ Let's explore the Actor structure. #### The `.actor` folder -The `.actor` folder contains the Actor configuration. The `actor.json` file defines the Actor's name, description, and other settings. Find more info in the [actor.json](https://docs.apify.com/platform/actors/development/actor-definition/actor-json) definition. +The `.actor` folder contains the Actor configuration. The `actor.json` file defines the Actor's name, description, and other settings. Find more info in the [actor.json](https://docs.apify.com/actors/development/actor-definition/actor-json) definition. #### Actor's `input` @@ -93,11 +95,11 @@ This JSON Schema validates input automatically (no error handling needed), power ::: -Find more info in the [Input schema](/platform/actors/development/actor-definition/input-schema) documentation. +Find more info in the [Input schema](/actors/development/actor-definition/input-schema) documentation. #### Actor's `storage` -The Actor system provides two storage types for files and results: [key-value](/platform/storage/key-value-store) store and [dataset](/platform/storage/dataset). +The Actor system provides two storage types for files and results: [key-value](/storage/key-value-store) store and [dataset](/storage/dataset). ##### Key-value store @@ -111,8 +113,8 @@ The dataset stores a series of data objects from web scraping, crawling, or data You define the Actor output using the Output schema files: -- [Dataset Schema Specification](/platform/actors/development/actor-definition/dataset-schema) -- [Key-value Store Schema Specification](/platform/actors/development/actor-definition/key-value-store-schema) +- [Dataset Schema Specification](/actors/development/actor-definition/dataset-schema) +- [Key-value Store Schema Specification](/actors/development/actor-definition/key-value-store-schema) The system uses this to generate an immutable JSON file that tells users where to find the Actor's results. @@ -146,5 +148,5 @@ Good job! 🎉 You're ready to develop your Actor. You can make changes to your - Visit the [Apify Academy](/academy) to access a comprehensive collection of tutorials, documentation, and learning resources. - To understand Actors in detail, read the [Actor Whitepaper](https://whitepaper.actor/). -- Check [Continuous integration](/platform/actors/development/deployment/continuous-integration) documentation to automate your Actor development process. -- After you finish building your first Actor, you can [share it with other users and even monetize it](/platform/actors/publishing). +- Check [Continuous integration](/actors/development/deployment/continuous-integration) documentation to automate your Actor development process. +- After you finish building your first Actor, you can [share it with other users and even monetize it](/actors/publishing). diff --git a/sources/platform/actors/development/quick-start/start_web_ide.md b/sources/platform/get-started/building/web-ide.md similarity index 91% rename from sources/platform/actors/development/quick-start/start_web_ide.md rename to sources/platform/get-started/building/web-ide.md index 2eac4668e2..089952e3f4 100644 --- a/sources/platform/actors/development/quick-start/start_web_ide.md +++ b/sources/platform/get-started/building/web-ide.md @@ -2,7 +2,9 @@ title: Web IDE sidebar_position: 2 description: Create and run your first Actor using the web IDE in Apify Console, from writing your first lines of code to deploying it live in the cloud. -slug: /actors/development/quick-start/web-ide +slug: /get-started/web-ide +pagination_next: null +pagination_prev: null --- import Tabs from '@theme/Tabs'; @@ -55,7 +57,7 @@ The next step it to build the Actor: Once the build starts, you're redirected to the **Last build** tab. Here you can check the build progress and view Docker build logs. -![Source code of an Actor in the web IDE](./images/build-actor-in-web-ide.svg) +![Source code of an Actor in the web IDE](../images/build-actor-in-web-ide.svg) ## Step 4: Run the Actor @@ -66,7 +68,7 @@ Finally, it's time to run the Actor: 1. _(Optional)_ To customize the run, expand the **Run options** section. You can adjust the following options: - **Build** – select the build version to run. - **Timeout** – set the timeout for the run in seconds. - - **Memory limit** – allocate the memory for the run. For details, see [Usage and resources](/platform/actors/running/usage-and-resources). + - **Memory limit** – allocate the memory for the run. For details, see [Usage and resources](/actors/running/usage-and-resources). - **Maximum cost per run**. 1. Click **Start**. @@ -138,5 +140,5 @@ Once you've made the desired changes, you can push the updated code back to the - Visit the [Apify Academy](/academy) to access a comprehensive collection of tutorials, documentation, and learning resources. - To understand Actors in detail, read the [Actor Whitepaper](https://whitepaper.actor/). -- Check [Continuous integration](/platform/actors/development/deployment/continuous-integration) documentation to automate your Actor development process. -- After you finish building your first Actor, you can [share it with other users and even monetize it](/platform/actors/publishing). +- Check [Continuous integration](/actors/development/deployment/continuous-integration) documentation to automate your Actor development process. +- After you finish building your first Actor, you can [share it with other users and even monetize it](/actors/publishing). diff --git a/sources/platform/get-started/images/actor-create-button.png b/sources/platform/get-started/images/actor-create-button.png new file mode 100644 index 0000000000..f38a7bbe6c Binary files /dev/null and b/sources/platform/get-started/images/actor-create-button.png differ diff --git a/sources/platform/get-started/images/actor-create-templates.png b/sources/platform/get-started/images/actor-create-templates.png new file mode 100644 index 0000000000..8ce9c81789 Binary files /dev/null and b/sources/platform/get-started/images/actor-create-templates.png differ diff --git a/sources/platform/get-started/images/actor-create.gif b/sources/platform/get-started/images/actor-create.gif new file mode 100644 index 0000000000..f02b324f5e Binary files /dev/null and b/sources/platform/get-started/images/actor-create.gif differ diff --git a/sources/platform/get-started/images/actor-input.png b/sources/platform/get-started/images/actor-input.png new file mode 100644 index 0000000000..cdfc1fb743 Binary files /dev/null and b/sources/platform/get-started/images/actor-input.png differ diff --git a/sources/platform/get-started/images/actor-local-code.png b/sources/platform/get-started/images/actor-local-code.png new file mode 100644 index 0000000000..974ae5d8ca Binary files /dev/null and b/sources/platform/get-started/images/actor-local-code.png differ diff --git a/sources/platform/get-started/images/actor-local-run.png b/sources/platform/get-started/images/actor-local-run.png new file mode 100644 index 0000000000..a7e162bd40 Binary files /dev/null and b/sources/platform/get-started/images/actor-local-run.png differ diff --git a/sources/platform/get-started/images/actor-pull.png b/sources/platform/get-started/images/actor-pull.png new file mode 100644 index 0000000000..b90d46709a Binary files /dev/null and b/sources/platform/get-started/images/actor-pull.png differ diff --git a/sources/platform/get-started/images/actor-source-code.png b/sources/platform/get-started/images/actor-source-code.png new file mode 100644 index 0000000000..a7ce61ab13 Binary files /dev/null and b/sources/platform/get-started/images/actor-source-code.png differ diff --git a/sources/platform/actors/development/quick-start/images/build-actor-in-web-ide.svg b/sources/platform/get-started/images/build-actor-in-web-ide.svg similarity index 100% rename from sources/platform/actors/development/quick-start/images/build-actor-in-web-ide.svg rename to sources/platform/get-started/images/build-actor-in-web-ide.svg diff --git a/sources/platform/get-started/images/claude.png b/sources/platform/get-started/images/claude.png new file mode 100644 index 0000000000..cb35e8e1a1 Binary files /dev/null and b/sources/platform/get-started/images/claude.png differ diff --git a/sources/platform/get-started/images/copy-for-ai.png b/sources/platform/get-started/images/copy-for-ai.png new file mode 100644 index 0000000000..183ebc7d2d Binary files /dev/null and b/sources/platform/get-started/images/copy-for-ai.png differ diff --git a/sources/platform/actors/development/quick-start/images/copy-for-llm-button.svg b/sources/platform/get-started/images/copy-for-llm-button.svg similarity index 100% rename from sources/platform/actors/development/quick-start/images/copy-for-llm-button.svg rename to sources/platform/get-started/images/copy-for-llm-button.svg diff --git a/sources/platform/get-started/images/cursor.png b/sources/platform/get-started/images/cursor.png new file mode 100644 index 0000000000..8eef3fe37f Binary files /dev/null and b/sources/platform/get-started/images/cursor.png differ diff --git a/sources/platform/get-started/images/github-copilot.png b/sources/platform/get-started/images/github-copilot.png new file mode 100644 index 0000000000..fe2c665870 Binary files /dev/null and b/sources/platform/get-started/images/github-copilot.png differ diff --git a/sources/platform/get-started/images/windsurf.png b/sources/platform/get-started/images/windsurf.png new file mode 100644 index 0000000000..b0ccf0d2f7 Binary files /dev/null and b/sources/platform/get-started/images/windsurf.png differ diff --git a/sources/platform/get-started/index.mdx b/sources/platform/get-started/index.mdx new file mode 100644 index 0000000000..ff12fb67df --- /dev/null +++ b/sources/platform/get-started/index.mdx @@ -0,0 +1,43 @@ +--- +title: Get started +description: A short orientation to the Apify platform — what Actors are, how to run your first one, and where to go next. +sidebar_label: Overview +sidebar_position: 0 +slug: /get-started +pagination_next: null +pagination_prev: null +--- + +Apify is a cloud platform for running serverless programs called Actors. This page is a short orientation: what an Actor is, how to run your first one, and where to go next. + +## What's an Actor? + +Actors are serverless programs that automate workflows and extract data. Each Actor takes a structured JSON input, performs a task (web scraping, browser automation, or data processing, for example), and can optionally produce a structured output. You can run Actors manually, via API, or on a schedule, and combine them into larger automations. + +[Apify Store](https://apify.com/store) has thousands of public Actors built by Apify and the open-source community. You can also publish your own. + +## Run your first Actor + +Open [Apify Store](https://apify.com/store), pick an Actor, click **Start**, and review the output. No code required. + +For background on the pricing models you'll see in Store (pay per event, pay per usage, rental), see [Actors in Store](/actors/running/actors-in-store). + +## Build your first Actor + +Three quick-start paths for developers: + +- [Local development](/get-started/locally) — develop with the Apify CLI in your own editor and terminal, then deploy. +- [Web IDE](/get-started/web-ide) — develop in the browser, zero local setup. +- [Build with AI](/get-started/build-with-ai) — use AI coding assistants (Claude Code, Cursor, GitHub Copilot) with the Apify MCP server. + +Building an AI agent rather than a scraper? + +- [Develop AI agents](/get-started/develop-ai-agents) — templates, sandboxes, LLM access through OpenRouter, and pay-per-event monetization. + +## Common next steps + +- [Schedule an Actor to run automatically](/actors/running/schedules) +- [Trigger Actors from Zapier, Make, n8n, or your own API](/integrations) +- [Connect an external AI agent to Apify](/get-started/agent-onboarding) +- [Set up an organization for your team](/account/collaboration/organization) +- [Publish and monetize your own Actor](/actors/publishing) diff --git a/sources/platform/index.mdx b/sources/platform/index.mdx deleted file mode 100644 index 30b9af60ad..0000000000 --- a/sources/platform/index.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Apify platform documentation -description: Apify is a cloud platform for web scraping, data extraction, and automation. Run pre-built Actors or develop your own tools on the Apify platform. -slug: / -hide_table_of_contents: true -sidebar_position: 0 -sidebar_label: Home ---- -import Card from "@site/src/components/Card"; -import CardGrid from "@site/src/components/CardGrid"; -import homepageContent from "./homepage_content.json"; - - -**Apify** is a cloud platform and marketplace for web data extraction and automation tools called **Actors**. - -## Get started - -Learn how to run any Actor in Apify Store or create your own. A step-by-step guides through your first steps on the Apify platform. - - - - - - - - -## Contents - - - { - homepageContent.map(({ title, description, to }, i) => ( - ) - ) - } - diff --git a/sources/platform/integrations/actors/index.md b/sources/platform/integrations/actors/index.md index 05c7b529bb..ad3903e2f6 100644 --- a/sources/platform/integrations/actors/index.md +++ b/sources/platform/integrations/actors/index.md @@ -7,7 +7,7 @@ slug: /integrations/actors **Actor-to-Actor integrations** connect Apify Actors with other Actors or tasks _on the platform itself_, letting you build multi-step workflows without leaving Apify. This is different from the third-party integrations covered elsewhere in this section - instead of routing data out to Make, n8n, or a warehouse, you chain Actors so the output of one becomes the trigger for another. -Any [integration-ready Actor](/platform/integrations/actors/integration-ready-actors) can act as the target of an Actor-to-Actor integration, so the catalog keeps growing as new Actors are published. +Any [integration-ready Actor](/integrations/actors/integration-ready-actors) can act as the target of an Actor-to-Actor integration, so the catalog keeps growing as new Actors are published. :::note Browse the catalog @@ -28,7 +28,7 @@ To connect an Actor with another Actor or task: On the setup screen, configure: -- **Start when** - Events that trigger the integrated Actor. These match webhook [event types](/platform/integrations/webhooks/events) (`run succeeded`, `build failed`, and so on). +- **Start when** - Events that trigger the integrated Actor. These match webhook [event types](/integrations/webhooks/events) (`run succeeded`, `build failed`, and so on). - **Actor input** - The input usually has two parts: static fields whose value doesn't change between runs (for example, a database connection string or table name) and dynamic fields specific to the triggering run (for example, a dataset ID). Static fields go in as-is. Dynamic fields are pulled from the implicit `payload` field (the default for most integration-ready Actors) or set with variables. The **Available variables** button in the input panel lists the variables you can interpolate. - **Available variables** - The same variables as in webhooks. The most common is `{{resource}}`, which holds the Run object in the shape returned by the [API](/api/v2/actor-run-get), or the Build object for build event types. Variables support dot notation, `{{resource.defaultDatasetId}}` and `{{resource.defaultKeyValueStoreId}}` cover most cases. @@ -56,6 +56,6 @@ The UI keeps variables enclosed in strings, which means the payload template is ## Next steps -- [Develop integration-ready Actors](/platform/integrations/actors/integration-ready-actors) - design your own Actor to be used as an integration target. -- [Integrating Actors via API](/platform/integrations/actors/integrating-actors-via-api) - set up the same integrations programmatically with the Apify API. +- [Develop integration-ready Actors](/integrations/actors/integration-ready-actors) - design your own Actor to be used as an integration target. +- [Integrating Actors via API](/integrations/actors/integrating-actors-via-api) - set up the same integrations programmatically with the Apify API. - [Connecting scrapers with Apify integrations](https://blog.apify.com/connecting-scrapers-apify-integration/) - a complete walkthrough on the Apify blog. diff --git a/sources/platform/integrations/actors/integration-ready-actors.md b/sources/platform/integrations/actors/integration-ready-actors.md index 4a01927f58..e0f35330a2 100644 --- a/sources/platform/integrations/actors/integration-ready-actors.md +++ b/sources/platform/integrations/actors/integration-ready-actors.md @@ -93,7 +93,7 @@ The example above focuses on accessing a run's default dataset, but the approach ## Make your Actor available to other users -To allow other users to use your Actor as an integration, [publish it in Apify Store](/platform/actors/publishing). Users can then find it in the **Add integration** dialog on the **Integrations** tab of any Actor. While publishing is enough, there are two ways to make your Actor more visible to users. +To allow other users to use your Actor as an integration, [publish it in Apify Store](/actors/publishing). Users can then find it in the **Add integration** dialog on the **Integrations** tab of any Actor. While publishing is enough, there are two ways to make your Actor more visible to users. For Actors generic enough to be used with most other Actors, you can have them listed under **Generic integrations** in the **Add integration** dialog. This includes (but is not limited to) Actors that upload datasets to databases, send notifications through various messaging systems, or create issues in ticketing systems. To have your Actor listed under generic integrations, [contact support](mailto:support@apify.com?subject=Actor%20generic%20integration). diff --git a/sources/platform/integrations/ai/agno.md b/sources/platform/integrations/ai/agno.md index 61a5f6cea1..1e717d7adf 100644 --- a/sources/platform/integrations/ai/agno.md +++ b/sources/platform/integrations/ai/agno.md @@ -18,7 +18,7 @@ This guide shows how to integrate Apify Actors with Agno to empower your AI agen ### Prerequisites - _Apify API token_: Obtain your API token from the [Apify Console](https://console.apify.com/settings/integrations). -- _OpenAI API key_: Get your API key from the [OpenAI platform](https://platform.openai.com/account/api-keys). +- _OpenAI API key_: Get your API key from the [OpenAI platform](https://.openai.com/account/api-keys). :::tip Alternative LLM providers @@ -130,6 +130,6 @@ Agno supports any Apify Actor via the ApifyTools class. You can specify a single - [How to build an AI agent](https://blog.apify.com/how-to-build-an-ai-agent/) - [Agno framework documentation](https://docs.agno.com) -- [Apify Actor documentation](/platform/actors) +- [Apify Actor documentation](/actors) - [Apify Store - browse available Actors](https://apify.com/store) - [Agno Apify toolkit documentation](https://docs.agno.com/tools/toolkits/others/apify#apify) diff --git a/sources/platform/integrations/ai/aws-bedrock.md b/sources/platform/integrations/ai/aws-bedrock.md index 8178fc9524..aa72b7f874 100644 --- a/sources/platform/integrations/ai/aws-bedrock.md +++ b/sources/platform/integrations/ai/aws-bedrock.md @@ -24,7 +24,7 @@ Amazon Bedrock allows you to create AI agents powered by large language models t Before getting started, ensure you have: - An active AWS Account. -- An Apify account and an [API token](https://docs.apify.com/platform/integrations/api#api-token). +- An Apify account and an [API token](https://docs.apify.com/integrations/api#api-token). - Granted access to any Large Language Model from Amazon Bedrock. To add access to a LLM, follow this [guide](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html). We'll use **Anthropic Claude 3.5 Sonnet** in this example. The overall process for creating an agent includes the following [steps](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html): diff --git a/sources/platform/integrations/ai/claude/claude-code-cli.md b/sources/platform/integrations/ai/claude/claude-code-cli.md index 8e14a9d6db..a9a2c6ced9 100644 --- a/sources/platform/integrations/ai/claude/claude-code-cli.md +++ b/sources/platform/integrations/ai/claude/claude-code-cli.md @@ -11,7 +11,7 @@ import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integrati The [Apify plugin for Claude Code](https://github.com/apify/apify-claude-code-plugin) connects Claude Code to Apify's library of [Actors](https://apify.com/store) and bundles: -- The [Apify MCP server](/platform/integrations/mcp) for searching the Store, running Actors, and retrieving datasets through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro). +- The [Apify MCP server](/integrations/mcp) for searching the Store, running Actors, and retrieving datasets through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro). - An `apify` routing agent that picks the right tool or skill from a natural-language request. - Five built-in skills for common workflows (see [Bundled skills](#bundled-skills) below). @@ -141,13 +141,13 @@ export APIFY_TOKEN= ## Limitations - Long-running Actors may exceed the time a single tool call waits for completion. Reduce the scope or split the work across multiple prompts. -- Each Actor run consumes Apify platform usage from your plan in addition to any Claude usage. See [Billing](/platform/console/billing) for details. +- Each Actor run consumes Apify platform usage from your plan in addition to any Claude usage. See [Billing](/account/billing) for details. - Skills that edit files in your project (Actor development, actorization, SDK integration) make local changes - review them before deploying or committing. ## Related integrations -- [MCP server integration](/platform/integrations/mcp) - Use the Apify MCP server with other clients -- [ChatGPT integration](/platform/integrations/chatgpt) - Connect the Apify MCP server to ChatGPT +- [MCP server integration](/integrations/mcp) - Use the Apify MCP server with other clients +- [ChatGPT integration](/integrations/chatgpt) - Connect the Apify MCP server to ChatGPT ## Resources diff --git a/sources/platform/integrations/ai/claude/claude-desktop.md b/sources/platform/integrations/ai/claude/claude-desktop.md index fab4845fcf..c13ed63f98 100644 --- a/sources/platform/integrations/ai/claude/claude-desktop.md +++ b/sources/platform/integrations/ai/claude/claude-desktop.md @@ -9,7 +9,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; -Connect [Claude Desktop](https://claude.ai/download) to the [Apify MCP server](/platform/integrations/mcp) to give your conversations access to thousands of Actors from [Apify Store](https://apify.com/store). Once connected, Claude can search for, run, and retrieve results from Actors directly in your chat. +Connect [Claude Desktop](https://claude.ai/download) to the [Apify MCP server](/integrations/mcp) to give your conversations access to thousands of Actors from [Apify Store](https://apify.com/store). Once connected, Claude can search for, run, and retrieve results from Actors directly in your chat. @@ -178,6 +178,6 @@ A system-wide installation can coexist with an existing version-manager installa ## Next steps -- [Apify MCP server](/platform/integrations/mcp) - Explore tool selection, available tools, telemetry, and rate limits +- [Apify MCP server](/integrations/mcp) - Explore tool selection, available tools, telemetry, and rate limits - [Apify MCP server configurator](https://mcp.apify.com) - Select tools visually and copy configuration - [Apify MCP server on GitHub](https://github.com/apify/apify-mcp-server) - Report bugs and suggest features diff --git a/sources/platform/integrations/ai/claude/index.mdx b/sources/platform/integrations/ai/claude/index.mdx index e4143caed0..913c671ef4 100644 --- a/sources/platform/integrations/ai/claude/index.mdx +++ b/sources/platform/integrations/ai/claude/index.mdx @@ -16,7 +16,7 @@ Apify integrates with [Anthropic Claude](https://www.anthropic.com/claude) in tw diff --git a/sources/platform/integrations/ai/crewai.md b/sources/platform/integrations/ai/crewai.md index a0c0f678c2..0c1004965b 100644 --- a/sources/platform/integrations/ai/crewai.md +++ b/sources/platform/integrations/ai/crewai.md @@ -17,8 +17,8 @@ This guide demonstrates how to integrate Apify Actors with CrewAI by building a ### Prerequisites -- **Apify API token**: To use Apify Actors in CrewAI, you need an Apify API token. Learn how to obtain it in the [Apify documentation](https://docs.apify.com/platform/integrations/api). -- **OpenAI API key**: To power the agents in CrewAI, you need an OpenAI API key. Get one from the [OpenAI platform](https://platform.openai.com/account/api-keys). +- **Apify API token**: To use Apify Actors in CrewAI, you need an Apify API token. Learn how to obtain it in the [Apify documentation](https://docs.apify.com/integrations/api). +- **OpenAI API key**: To power the agents in CrewAI, you need an OpenAI API key. Get one from the [OpenAI platform](https://.openai.com/account/api-keys). - **Python packages**: Install the following Python packages: ```bash @@ -195,7 +195,7 @@ print(result) ## Resources -- [Apify Actors](https://docs.apify.com/platform/actors) +- [Apify Actors](https://docs.apify.com/actors) - [CrewAI Documentation](https://docs.crewai.com/) - [What are AI agents?](https://blog.apify.com/what-are-ai-agents/) - [How to build an AI agent](https://blog.apify.com/how-to-build-an-ai-agent/) diff --git a/sources/platform/integrations/ai/google-adk.md b/sources/platform/integrations/ai/google-adk.md index 7c1e7444a4..1c9c0da535 100644 --- a/sources/platform/integrations/ai/google-adk.md +++ b/sources/platform/integrations/ai/google-adk.md @@ -17,7 +17,7 @@ Apify is a marketplace of web scraping and automation tools, AI agents, and MCP ### Prerequisites -- _Apify API token_: To use Apify Actors in Google ADK, you need an Apify API token. To obtain your token, check [Apify documentation](/platform/integrations/api#api-token). +- _Apify API token_: To use Apify Actors in Google ADK, you need an Apify API token. To obtain your token, check [Apify documentation](/integrations/api#api-token). - _Python packages_: Install the following Python packages: ```bash @@ -84,9 +84,9 @@ Find a pub near the Ferry Building in San Francisco. ## Resources -- [Apify Actors](https://docs.apify.com/platform/actors) +- [Apify Actors](https://docs.apify.com/actors) - [Google ADK documentation](https://google.github.io/adk-docs/get-started/) - [What are AI agents?](https://blog.apify.com/what-are-ai-agents/) - [Apify MCP server](https://mcp.apify.com) -- [Apify MCP server documentation](https://docs.apify.com/platform/integrations/mcp) +- [Apify MCP server documentation](https://docs.apify.com/integrations/mcp) - [Apify OpenRouter proxy](https://apify.com/apify/openrouter) diff --git a/sources/platform/integrations/ai/haystack.md b/sources/platform/integrations/ai/haystack.md index f8b39da02c..de846549e6 100644 --- a/sources/platform/integrations/ai/haystack.md +++ b/sources/platform/integrations/ai/haystack.md @@ -34,7 +34,7 @@ from haystack.utils.auth import Secret from apify_haystack import ApifyDatasetFromActorCall ``` -Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://platform.openai.com/account/api-keys) and initialize these into environment variable: +Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://.openai.com/account/api-keys) and initialize these into environment variable: ```python import os diff --git a/sources/platform/integrations/ai/index.mdx b/sources/platform/integrations/ai/index.mdx index 9066edf360..ce1d55d095 100644 --- a/sources/platform/integrations/ai/index.mdx +++ b/sources/platform/integrations/ai/index.mdx @@ -16,7 +16,7 @@ Plug Apify Actors into the AI stack - chat clients like Claude and ChatGPT via t @@ -92,8 +92,8 @@ Plug Apify Actors into the AI stack - chat clients like Claude and ChatGPT via t ## By provider -The [Claude hub](/platform/integrations/claude) covers Apify integrations across Claude Desktop and the Claude Code CLI on one page. +The [Claude hub](/integrations/claude) covers Apify integrations across Claude Desktop and the Claude Code CLI on one page. -The [OpenAI hub](/platform/integrations/openai) covers Apify integrations across ChatGPT, the OpenAI Agents SDK, and OpenAI Assistants on one page. +The [OpenAI hub](/integrations/openai) covers Apify integrations across ChatGPT, the OpenAI Agents SDK, and OpenAI Assistants on one page. -For Google ADK, see the [Google ADK](/platform/integrations/google-adk) page. The full list of AI integrations lives in the sidebar. +For Google ADK, see the [Google ADK](/integrations/google-adk) page. The full list of AI integrations lives in the sidebar. diff --git a/sources/platform/integrations/ai/langchain.md b/sources/platform/integrations/ai/langchain.md index 855807e536..65b3c9463e 100644 --- a/sources/platform/integrations/ai/langchain.md +++ b/sources/platform/integrations/ai/langchain.md @@ -34,7 +34,7 @@ from langchain_openai import ChatOpenAI from langchain_openai.embeddings import OpenAIEmbeddings ``` -Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://platform.openai.com/account/api-keys) and initialize these into environment variable: +Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://.openai.com/account/api-keys) and initialize these into environment variable: ```python os.environ["OPENAI_API_KEY"] = "Your OpenAI API key" diff --git a/sources/platform/integrations/ai/langflow.md b/sources/platform/integrations/ai/langflow.md index 3726008e25..48bce99f97 100644 --- a/sources/platform/integrations/ai/langflow.md +++ b/sources/platform/integrations/ai/langflow.md @@ -20,9 +20,9 @@ This guide will demonstrate two different ways to use Apify Actors with Langflow ### Prerequisites -- **Apify API token**: To use Apify Actors in Langflow, you need an Apify API token. If you don't have one, you can learn how to get it in the [Apify documentation](https://docs.apify.com/platform/integrations/api). +- **Apify API token**: To use Apify Actors in Langflow, you need an Apify API token. If you don't have one, you can learn how to get it in the [Apify documentation](https://docs.apify.com/integrations/api). -- **OpenAI API key**: To work with agents in Langflow, you need an OpenAI API key. If you don't have one, you can get it from the [OpenAI platform](https://platform.openai.com/account/api-keys). +- **OpenAI API key**: To work with agents in Langflow, you need an OpenAI API key. If you don't have one, you can get it from the [OpenAI platform](https://.openai.com/account/api-keys). #### Langflow @@ -61,7 +61,7 @@ To call Apify Actors in Langflow, you need to add the **Apify Actors** component From the bundle menu, add **Apify Actors** component: ![Flow - Add Apify Actors](../images/langflow/bundles_apify.png) -Next, configure the Apify Actors components. First, input your API token (learn how to get it at [Integrations](https://docs.apify.com/platform/integrations/api)). +Next, configure the Apify Actors components. First, input your API token (learn how to get it at [Integrations](https://docs.apify.com/integrations/api)). Then, set the Actor ID of the component to `apify/rag-web-browser` to use the [RAG Web Browser](https://apify.com/apify/rag-web-browser). Set the **Run input** field to pass arguments to the Actor run, allowing it to search Google with the query `"what is monero?"` (full Actor input schema can be found in the [RAG Web Browser input schema](https://apify.com/apify/rag-web-browser/input-schema)): @@ -93,10 +93,10 @@ Now that you understand how to call Apify Actors, let's build a practical exampl Create a new flow and add two **Apify Actors** components from the menu. -Input your API token (learn how to get it in the [Integrations documentation](https://docs.apify.com/platform/integrations/api)) and set the Actor ID of the first component to `apify/google-search-scraper` and the second one to `clockworks/free-tiktok-scraper`: +Input your API token (learn how to get it in the [Integrations documentation](https://docs.apify.com/integrations/api)) and set the Actor ID of the first component to `apify/google-search-scraper` and the second one to `clockworks/free-tiktok-scraper`: ![Flow - Actors configuration](../images/langflow/apify_actors_configuration.png) -Add the **Agent** component from the menu and set your OpenAI API key (get it from the [OpenAI API keys page](https://platform.openai.com/account/api-keys)): +Add the **Agent** component from the menu and set your OpenAI API key (get it from the [OpenAI API keys page](https://.openai.com/account/api-keys)): :::tip Optimize Agent results diff --git a/sources/platform/integrations/ai/langgraph.md b/sources/platform/integrations/ai/langgraph.md index d5cdd92648..8dee446edf 100644 --- a/sources/platform/integrations/ai/langgraph.md +++ b/sources/platform/integrations/ai/langgraph.md @@ -17,9 +17,9 @@ This guide will demonstrate how to use Apify Actors with LangGraph by building a ### Prerequisites -- **Apify API token**: To use Apify Actors in LangGraph, you need an Apify API token. If you don't have one, you can learn how to obtain it in the [Apify documentation](https://docs.apify.com/platform/integrations/api). +- **Apify API token**: To use Apify Actors in LangGraph, you need an Apify API token. If you don't have one, you can learn how to obtain it in the [Apify documentation](https://docs.apify.com/integrations/api). -- **OpenAI API key**: In order to work with agents in LangGraph, you need an OpenAI API key. If you don't have one, you can get it from the [OpenAI platform](https://platform.openai.com/account/api-keys). +- **OpenAI API key**: In order to work with agents in LangGraph, you need an OpenAI API key. If you don't have one, you can get it from the [OpenAI platform](https://.openai.com/account/api-keys). - **Python packages**: You need to install the following Python packages: @@ -146,5 +146,5 @@ for state in agent_executor.stream( ## Resources -- [Apify Actors](https://docs.apify.com/platform/actors) +- [Apify Actors](https://docs.apify.com/actors) - [LangGraph - How to Create a ReAct Agent](https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/) diff --git a/sources/platform/integrations/ai/lindy.md b/sources/platform/integrations/ai/lindy.md index b52c066d88..0e314ea0b9 100644 --- a/sources/platform/integrations/ai/lindy.md +++ b/sources/platform/integrations/ai/lindy.md @@ -48,7 +48,7 @@ This section demonstrates how to integrate Apify's data extraction capabilities :::tip Actor Availability -You have access to thousands of Actors available on the [Apify Store](https://apify.com/store). Please note that Actors using the _rental pricing model_ are not available for use with this integration. For details on Actor pricing models, refer to our [Pricing Documentation](/platform/actors/publishing/monetize#rental-pricing-model). +You have access to thousands of Actors available on the [Apify Store](https://apify.com/store). Please note that Actors using the _rental pricing model_ are not available for use with this integration. For details on Actor pricing models, refer to our [Pricing Documentation](/actors/publishing/monetize#rental-pricing-model). ::: diff --git a/sources/platform/integrations/ai/llama.md b/sources/platform/integrations/ai/llama.md index ad6272c577..f0c4a1a0e7 100644 --- a/sources/platform/integrations/ai/llama.md +++ b/sources/platform/integrations/ai/llama.md @@ -27,7 +27,7 @@ After successfully installing all dependencies, we can start writing Python code ### Apify Actor -To use the Apify Actor, import `ApifyActor` and `Document`, and set your [Apify API token](https://docs.apify.com/platform/integrations/api#api-token) in the code. +To use the Apify Actor, import `ApifyActor` and `Document`, and set your [Apify API token](https://docs.apify.com/integrations/api#api-token) in the code. The following example uses the [Website Content Crawler](https://apify.com/apify/website-content-crawler) Actor to crawl an entire website, which will extract text content from the web pages. The extracted text is formatted as a llama_index `Document` and can be fed to a vector store or language model like GPT. diff --git a/sources/platform/integrations/ai/manus.md b/sources/platform/integrations/ai/manus.md index e6d3bf9d06..ce0c3cabd1 100644 --- a/sources/platform/integrations/ai/manus.md +++ b/sources/platform/integrations/ai/manus.md @@ -84,7 +84,7 @@ Manus will call `search-actors` to find [Google Search Scraper](https://apify.co ## Configure tools -After connecting, the Apify MCP server exposes a default set of tools for Actor discovery (`search-actors`, `fetch-actor-details`, `call-actor`, `get-actor-output`), web browsing (`apify/rag-web-browser`), and documentation search (`search-apify-docs`, `fetch-apify-docs`). See the [full tool reference](/platform/integrations/mcp#available-tools) for the complete list. +After connecting, the Apify MCP server exposes a default set of tools for Actor discovery (`search-actors`, `fetch-actor-details`, `call-actor`, `get-actor-output`), web browsing (`apify/rag-web-browser`), and documentation search (`search-apify-docs`, `fetch-apify-docs`). See the [full tool reference](/integrations/mcp#available-tools) for the complete list. To control which tools are available, append a `tools=` query parameter to the server URL: @@ -186,8 +186,8 @@ If the OAuth prompt fails or you can't complete the login flow, you can connect ## Related integrations -- [ChatGPT integration](/platform/integrations/chatgpt) - Connect the Apify MCP server to ChatGPT -- [MCP server integration](/platform/integrations/mcp) - Use the Apify MCP server with Claude Desktop, VS Code, and other clients +- [ChatGPT integration](/integrations/chatgpt) - Connect the Apify MCP server to ChatGPT +- [MCP server integration](/integrations/mcp) - Use the Apify MCP server with Claude Desktop, VS Code, and other clients ## Resources diff --git a/sources/platform/integrations/ai/mastra.md b/sources/platform/integrations/ai/mastra.md index 29d848509d..16c5eb7b8e 100644 --- a/sources/platform/integrations/ai/mastra.md +++ b/sources/platform/integrations/ai/mastra.md @@ -13,7 +13,7 @@ import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integrati ## What is MCP server -A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server exposes specific data sources or tools to agents via a standardized protocol. It acts as a bridge, connecting large language models (LLMs) to external systems like databases, APIs, or local filesystems. Built on a client-server architecture, MCP servers enable secure, real-time interaction, allowing agents to fetch context or execute actions without custom integrations. Think of it as a modular plugin system for agents, simplifying how they access and process data. Apify provides [Actors MCP server](https://mcp.apify.com/) to expose [Apify Actors](https://docs.apify.com/platform/actors) from the [Apify Store](https://apify.com/store) as tools via the MCP protocol. +A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server exposes specific data sources or tools to agents via a standardized protocol. It acts as a bridge, connecting large language models (LLMs) to external systems like databases, APIs, or local filesystems. Built on a client-server architecture, MCP servers enable secure, real-time interaction, allowing agents to fetch context or execute actions without custom integrations. Think of it as a modular plugin system for agents, simplifying how they access and process data. Apify provides [Actors MCP server](https://mcp.apify.com/) to expose [Apify Actors](https://docs.apify.com/actors) from the [Apify Store](https://apify.com/store) as tools via the MCP protocol. ## How to use Apify with Mastra via MCP @@ -21,8 +21,8 @@ This guide demonstrates how to integrate Apify Actors with Mastra by building an ### Prerequisites -- _Apify API token_: To use Apify Actors, you need an Apify API token. Learn how to obtain it in the [Apify documentation](https://docs.apify.com/platform/integrations/api). -- _LLM provider API key_: To power the agents, you need an LLM provider API key. For example, get one from the [OpenAI](https://platform.openai.com/account/api-keys) or [Anthropic](https://platform.claude.com/settings/keys). +- _Apify API token_: To use Apify Actors, you need an Apify API token. Learn how to obtain it in the [Apify documentation](https://docs.apify.com/integrations/api). +- _LLM provider API key_: To power the agents, you need an LLM provider API key. For example, get one from the [OpenAI](https://.openai.com/account/api-keys) or [Anthropic](https://.claude.com/settings/keys). - _Node.js_: Ensure you have Node.js installed. - _Packages_: Install the following packages: @@ -206,7 +206,7 @@ await mcpClient.disconnect(); ## Resources -- [Apify Actors](https://docs.apify.com/platform/actors) +- [Apify Actors](https://docs.apify.com/actors) - [Mastra Documentation](https://mastra.ai/docs) - [Apify MCP server](https://mcp.apify.com) - [How to use MCP with Apify Actors](https://blog.apify.com/how-to-use-mcp/) diff --git a/sources/platform/integrations/ai/mcp-connectors/index.md b/sources/platform/integrations/ai/mcp-connectors/index.md index 2b83031499..812fb7ccca 100644 --- a/sources/platform/integrations/ai/mcp-connectors/index.md +++ b/sources/platform/integrations/ai/mcp-connectors/index.md @@ -9,7 +9,7 @@ MCP connectors let Actors call third-party services through [Model Context Proto You authorize a connector once in your [Account settings > API & Integrations](https://console.apify.com/settings/integrations). When you run an Actor that accepts connectors, the input form shows a picker filtered to those compatible with the Actor's requirements. At runtime, the Apify platform injects your service credentials server-side. The Actor authenticates to the proxy with its Apify run token, never with your third-party credentials. -MCP connectors are distinct from the [Apify MCP server](/platform/integrations/mcp). The MCP server exposes Apify Actors as tools to outside AI clients (Claude, ChatGPT, Cursor, and others); MCP connectors do the opposite, letting Apify Actors call external MCP servers as tools. The two features are independent and can be used together or separately. +MCP connectors are distinct from the [Apify MCP server](/integrations/mcp). The MCP server exposes Apify Actors as tools to outside AI clients (Claude, ChatGPT, Cursor, and others); MCP connectors do the opposite, letting Apify Actors call external MCP servers as tools. The two features are independent and can be used together or separately. ## How it works @@ -46,7 +46,7 @@ MCP connectors are designed so that the Actor never holds your credentials, and - Access ends when the run ends. The proxy session expires as soon as the Actor run finishes. - You control which tools a connector permits. The restriction applies to every Actor using the connector, on top of each Actor's own declared tool constraints. -For the developer-side controls and tool-permission model, see [Build Actors with MCP connectors](/platform/integrations/mcp-connectors/use-in-actors#tool-permissions). +For the developer-side controls and tool-permission model, see [Build Actors with MCP connectors](/integrations/mcp-connectors/use-in-actors#tool-permissions). ## Authentication methods @@ -62,11 +62,11 @@ Apify provides automatic OAuth client setup for Notion and Supabase. For GitHub, Tools are discovered when you first authorize a connector. To pick up new tools added to the upstream server, re-authorize the connector. -Create and manage your connectors in [Settings > API & Integrations > MCP connectors](/platform/console/settings#mcp-connectors). +Create and manage your connectors in [Settings > API & Integrations > MCP connectors](/account/settings#mcp-connectors). ## Run an Actor with a connector -When you run an Actor that accepts MCP connectors, the input form shows a connector picker filtered to those compatible with the Actor's requirements. Pick one of your authorized connectors, or create a new one inline. To set connectors up in advance, see [Account settings - MCP connectors](/platform/console/settings#mcp-connectors). +When you run an Actor that accepts MCP connectors, the input form shows a connector picker filtered to those compatible with the Actor's requirements. Pick one of your authorized connectors, or create a new one inline. To set connectors up in advance, see [Account settings - MCP connectors](/account/settings#mcp-connectors). ## Use cases @@ -79,6 +79,6 @@ Typical patterns that MCP connectors enable: ## Next steps -- [Build Actors with MCP connectors](/platform/integrations/mcp-connectors/use-in-actors) - declare connectors in your input schema, connect from TypeScript or Python, and configure tool permissions. -- [Account settings - MCP connectors](/platform/console/settings#mcp-connectors) - create, authorize, and manage connectors in Apify Console. -- [Apify MCP server](/platform/integrations/mcp) - expose Apify Actors as MCP tools to outside AI clients. +- [Build Actors with MCP connectors](/integrations/mcp-connectors/use-in-actors) - declare connectors in your input schema, connect from TypeScript or Python, and configure tool permissions. +- [Account settings - MCP connectors](/account/settings#mcp-connectors) - create, authorize, and manage connectors in Apify Console. +- [Apify MCP server](/integrations/mcp) - expose Apify Actors as MCP tools to outside AI clients. diff --git a/sources/platform/integrations/ai/mcp-connectors/using-connectors-in-actors.md b/sources/platform/integrations/ai/mcp-connectors/using-connectors-in-actors.md index 45196fdc22..1245b4af99 100644 --- a/sources/platform/integrations/ai/mcp-connectors/using-connectors-in-actors.md +++ b/sources/platform/integrations/ai/mcp-connectors/using-connectors-in-actors.md @@ -8,7 +8,7 @@ slug: /integrations/mcp-connectors/use-in-actors import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -This guide explains how to build Actors that accept [MCP connectors](/platform/integrations/mcp-connectors) as input, connect to them at runtime, and constrain which tools they can call. +This guide explains how to build Actors that accept [MCP connectors](/integrations/mcp-connectors) as input, connect to them at runtime, and constrain which tools they can call. ## Declare connectors in the input schema @@ -448,7 +448,7 @@ For the full schema, see [The `mcpServers` rule list](#the-mcpservers-rule-list) ## Related pages -- [MCP connectors overview](/platform/integrations/mcp-connectors) -- [Input schema specification - resource type](/platform/actors/development/actor-definition/input-schema/specification/v1#resource-type) -- [Account settings - MCP connectors](/platform/console/settings#mcp-connectors) -- [Apify environment variables](/platform/actors/development/programming-interface/environment-variables#system-environment-variables) +- [MCP connectors overview](/integrations/mcp-connectors) +- [Input schema specification - resource type](/actors/development/actor-definition/input-schema/specification/v1#resource-type) +- [Account settings - MCP connectors](/account/settings#mcp-connectors) +- [Apify environment variables](/actors/development/programming-interface/environment-variables#system-environment-variables) diff --git a/sources/platform/integrations/ai/mcp.md b/sources/platform/integrations/ai/mcp.md index a824158fca..4bdc713bb4 100644 --- a/sources/platform/integrations/ai/mcp.md +++ b/sources/platform/integrations/ai/mcp.md @@ -23,7 +23,7 @@ and enables AI coding assistants to access Apify documentation and tutorials. :::info Apify MCP server vs MCP connectors -This page covers the Apify MCP server, which exposes Apify Actors as tools to outside AI clients. If you are building an Actor that needs to call third-party MCP servers (such as Notion or Slack) on a user's behalf, see [MCP connectors](/platform/integrations/mcp-connectors) instead. +This page covers the Apify MCP server, which exposes Apify Actors as tools to outside AI clients. If you are building an Actor that needs to call third-party MCP servers (such as Notion or Slack) on a user's behalf, see [MCP connectors](/integrations/mcp-connectors) instead. ::: @@ -217,7 +217,7 @@ VS Code supports MCP through GitHub Copilot's agent mode (requires Copilot subsc You can also search for "Apify" in the connector directory and install it directly. -For detailed setup options and troubleshooting, see the [Claude Desktop integration guide](/platform/integrations/claude-desktop). +For detailed setup options and troubleshooting, see the [Claude Desktop integration guide](/integrations/claude-desktop). @@ -314,8 +314,8 @@ For a detailed overview of client support for dynamic discovery, see the [MCP cl Agentic payments allow AI agents to autonomously pay for Actor runs without requiring an Apify API token. The Apify MCP server supports two payment methods: -- [x402 protocol](/platform/integrations/x402) - Direct on-chain payments using USDC on the [Base](https://www.base.org/) blockchain via the open [x402](https://www.x402.org/) standard. -- [Skyfire](/platform/integrations/skyfire) - Managed payment tokens through the [Skyfire](https://www.skyfire.xyz/) payment platform. +- [x402 protocol](/integrations/x402) - Direct on-chain payments using USDC on the [Base](https://www.base.org/) blockchain via the open [x402](https://www.x402.org/) standard. +- [Skyfire](/integrations/skyfire) - Managed payment tokens through the [Skyfire](https://www.skyfire.xyz/) payment platform. For setup instructions and details, see the individual integration pages. @@ -384,7 +384,7 @@ documentation queries. If you exceed this limit, you'll receive a `429` response :::tip Claude Desktop issues -For Claude Desktop-specific troubleshooting (tools not loading, connection errors, corrupted cache), see [Claude Desktop troubleshooting](/platform/integrations/claude-desktop#troubleshooting). +For Claude Desktop-specific troubleshooting (tools not loading, connection errors, corrupted cache), see [Claude Desktop troubleshooting](/integrations/claude-desktop#troubleshooting). ::: diff --git a/sources/platform/integrations/ai/milvus.md b/sources/platform/integrations/ai/milvus.md index cf58fd894f..8825c85f2a 100644 --- a/sources/platform/integrations/ai/milvus.md +++ b/sources/platform/integrations/ai/milvus.md @@ -23,7 +23,7 @@ Before you begin, ensure that you have the following: - A Milvus/Zilliz database universal resource identifier (URI) and Token to setup the client. Optionally, you can use a username and password in the URI. You can run Milvus on Docker or Kubernetes, but in this example, we'll use the hosted Milvus service at [Zilliz Cloud](https://cloud.zilliz.com). - An [OpenAI API key](https://openai.com/index/openai-api/) to compute text embeddings. -- An [Apify API token](https://docs.apify.com/platform/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). +- An [Apify API token](https://docs.apify.com/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). ### How to set up Milvus/Zilliz database diff --git a/sources/platform/integrations/ai/openai/chatgpt.md b/sources/platform/integrations/ai/openai/chatgpt.md index 4ef5c00a40..0b18b4d4c0 100644 --- a/sources/platform/integrations/ai/openai/chatgpt.md +++ b/sources/platform/integrations/ai/openai/chatgpt.md @@ -24,7 +24,7 @@ Before connecting ChatGPT to Apify, you'll need: - _An Apify account_ - If you don't have an Apify account already, you can [sign up](https://console.apify.com/sign-up) - _Apify API token_ - Get your API token from the **API & Integrations** section in [Apify Console](https://console.apify.com/settings/integrations). This token authorizes the MCP server to run Actors on your behalf. Make sure to keep it secure. - _An OpenAI account with access to ChatGPT_ - You need an OpenAI account to use ChatGPT. -- _ChatGPT with Developer mode enabled_ - You must enable [Developer Mode](https://platform.openai.com/docs/guides/developer-mode) to add custom connectors (when the Developer mode is active, the message input box is outlined in orange). +- _ChatGPT with Developer mode enabled_ - You must enable [Developer Mode](https://.openai.com/docs/guides/developer-mode) to add custom connectors (when the Developer mode is active, the message input box is outlined in orange). ## Create an MCP connector @@ -77,12 +77,12 @@ You should see ChatGPT calling Apify tools - such as the [RAG Web Browser](https ## Related integrations -- [OpenAI Assistants integration](/platform/integrations/openai-assistants) - Use Apify Actors with OpenAI Assistants API via function calling -- [OpenAI Agents SDK integration](/platform/integrations/openai-agents) - Integrate Apify MCP server with OpenAI Agents SDK +- [OpenAI Assistants integration](/integrations/openai-assistants) - Use Apify Actors with OpenAI Assistants API via function calling +- [OpenAI Agents SDK integration](/integrations/openai-agents) - Integrate Apify MCP server with OpenAI Agents SDK ## Resources -- [ChatGPT Developer mode](https://platform.openai.com/docs/guides/developer-mode) - Learn how to enable Developer Mode in ChatGPT -- [Connectors and MCP servers](https://platform.openai.com/docs/guides/tools-connectors-mcp) - Official OpenAI documentation on using MCP servers with ChatGPT +- [ChatGPT Developer mode](https://.openai.com/docs/guides/developer-mode) - Learn how to enable Developer Mode in ChatGPT +- [Connectors and MCP servers](https://.openai.com/docs/guides/tools-connectors-mcp) - Official OpenAI documentation on using MCP servers with ChatGPT - [Apify MCP server](https://mcp.apify.com) - Interactive configuration tool for the Apify MCP server -- [Apify MCP documentation](/platform/integrations/mcp) - Complete guide to using the Apify MCP server +- [Apify MCP documentation](/integrations/mcp) - Complete guide to using the Apify MCP server diff --git a/sources/platform/integrations/ai/openai/index.mdx b/sources/platform/integrations/ai/openai/index.mdx index 925a3bf0f0..3416de42fa 100644 --- a/sources/platform/integrations/ai/openai/index.mdx +++ b/sources/platform/integrations/ai/openai/index.mdx @@ -16,21 +16,21 @@ Apify integrates with [OpenAI](https://openai.com) in three places: ChatGPT (via diff --git a/sources/platform/integrations/ai/openai/openai-agents.md b/sources/platform/integrations/ai/openai/openai-agents.md index 0d4c6dbb9d..a4d80bdea2 100644 --- a/sources/platform/integrations/ai/openai/openai-agents.md +++ b/sources/platform/integrations/ai/openai/openai-agents.md @@ -20,7 +20,7 @@ Before integrating Apify with OpenAI Agents SDK, you'll need: - _An Apify account_ - If you don't have an Apify account already, you can [sign up](https://console.apify.com/sign-up) - _Apify API token_ - Get your API token from the **API & Integrations** section in [Apify Console](https://console.apify.com/settings/integrations). This token authorizes the Apify MCP server to run Actors on your behalf. Make sure to keep it secure. -- _OpenAI API key_ - Get your API key from the [OpenAI platform](https://platform.openai.com/account/api-keys). You need this to use OpenAI Agents SDK. +- _OpenAI API key_ - Get your API key from the [OpenAI platform](https://.openai.com/account/api-keys). You need this to use OpenAI Agents SDK. - _Python packages_ - Install the required packages: ```bash @@ -267,8 +267,8 @@ For a comprehensive example with error handling and reporting, refer to the [Ope ## Related integrations -- [ChatGPT integration](/platform/integrations/chatgpt) - Add Apify MCP server as a custom connector in ChatGPT -- [OpenAI Assistants integration](/platform/integrations/openai-assistants) - Use Apify Actors with OpenAI Assistants API via function calling +- [ChatGPT integration](/integrations/chatgpt) - Add Apify MCP server as a custom connector in ChatGPT +- [OpenAI Assistants integration](/integrations/openai-assistants) - Use Apify Actors with OpenAI Assistants API via function calling ## Resources @@ -277,5 +277,5 @@ For a comprehensive example with error handling and reporting, refer to the [Ope - [OpenAI Agent MCP Tester Actor](https://apify.com/jiri.spilka/openai-agent-mcp-tester) - A specialized Actor for testing MCP server integration - [OpenAI Agent MCP Tester GitHub repository](https://github.com/apify/openai-agent-mcp-tester) - Source code for the MCP tester Actor - [Apify MCP server](https://mcp.apify.com) - Interactive configuration tool for the Apify MCP server -- [Apify MCP documentation](/platform/integrations/mcp) - Complete guide to using the Apify MCP server +- [Apify MCP documentation](/integrations/mcp) - Complete guide to using the Apify MCP server - [Model Context Protocol specification](https://modelcontextprotocol.io/docs/getting-started/intro) - Learn about the MCP specification diff --git a/sources/platform/integrations/ai/openai/openai-assistants.md b/sources/platform/integrations/ai/openai/openai-assistants.md index b7c2efae64..725920ce0b 100644 --- a/sources/platform/integrations/ai/openai/openai-assistants.md +++ b/sources/platform/integrations/ai/openai/openai-assistants.md @@ -7,19 +7,19 @@ slug: /integrations/openai-assistants import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; -[OpenAI Assistants API](https://platform.openai.com/docs/assistants/overview) allows you to build your own AI applications such as chatbots, virtual assistants, and more. -The OpenAI Assistants can access OpenAI knowledge base ([vector store](https://platform.openai.com/docs/api-reference/vector-stores)) via file search and use function calling for dynamic interaction and data retrieval. +[OpenAI Assistants API](https://.openai.com/docs/assistants/overview) allows you to build your own AI applications such as chatbots, virtual assistants, and more. +The OpenAI Assistants can access OpenAI knowledge base ([vector store](https://.openai.com/docs/api-reference/vector-stores)) via file search and use function calling for dynamic interaction and data retrieval. Unlike Custom GPT, OpenAI Assistants are available via API, enabling integration with Apify to automatically update assistant data and deliver real-time information, improving the quality of answers. In this tutorial, we’ll start by demonstrating how to create an assistant and integrate real-time data using function calling with the [RAG Web Browser](https://apify.com/apify/rag-web-browser). -Next, we’ll show how to save data from Apify Actors into the OpenAI Vector Store for easy retrieval through [file-search](https://platform.openai.com/docs/assistants/tools/file-search). +Next, we’ll show how to save data from Apify Actors into the OpenAI Vector Store for easy retrieval through [file-search](https://.openai.com/docs/assistants/tools/file-search). ## Real-time search data for OpenAI Assistant -We'll use the [RAG Web Browser](https://apify.com/apify/rag-web-browser) Actor to fetch the latest information from the web and provide it to the OpenAI Assistant through [function calling](https://platform.openai.com/docs/assistants/tools/function-calling?context=without-streaming). +We'll use the [RAG Web Browser](https://apify.com/apify/rag-web-browser) Actor to fetch the latest information from the web and provide it to the OpenAI Assistant through [function calling](https://.openai.com/docs/assistants/tools/function-calling?context=without-streaming). To begin, we need to create an OpenAI Assistant with the appropriate instructions. After that, we can initiate a conversation with the assistant by creating a thread, adding messages, and running the assistant to receive responses. The image below provides an overview of the entire process: @@ -44,7 +44,7 @@ from openai import OpenAI, Stream from openai.types.beta.threads.run_submit_tool_outputs_params import ToolOutput ``` -Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://platform.openai.com/account/api-keys) and initialize OpenAI and Apify clients: +Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://.openai.com/account/api-keys) and initialize OpenAI and Apify clients: ```python client = OpenAI(api_key="YOUR OPENAI API KEY") @@ -245,7 +245,7 @@ for m in client.beta.threads.messages.list(thread_id=run.thread_id): ## Save data into OpenAI Vector Store and use it in the assistant -To provide real-time or proprietary data, OpenAI Assistants can access the [OpenAI Vector Store](https://platform.openai.com/docs/assistants/tools/file-search/vector-stores) to retrieve information for their answers. +To provide real-time or proprietary data, OpenAI Assistants can access the [OpenAI Vector Store](https://.openai.com/docs/assistants/tools/file-search/vector-stores) to retrieve information for their answers. With the [Apify OpenAI Vector Store Integration](https://apify.com/jiri.spilka/openai-vector-store-integration), data saving and updating the OpenAI Vector Store can be fully automated. The following image illustrates the Apify-OpenAI Vector Store integration: @@ -260,7 +260,7 @@ Before we start, we need to install all dependencies: pip install apify-client openai ``` -Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://platform.openai.com/account/api-keys) and initialize OpenAI and Apify clients: +Find your [Apify API token](https://console.apify.com/settings/integrations) and [OpenAI API key](https://.openai.com/account/api-keys) and initialize OpenAI and Apify clients: ```python from apify_client import ApifyClient @@ -295,7 +295,7 @@ assistant = client.beta.assistants.update( Now, use [Website Content Crawler](https://apify.com/apify/website-content-crawler) to crawl the web and save the data into Apify's dataset: ```python -run_input = {"startUrls": [{"url": "https://docs.apify.com/platform"}], "maxCrawlPages": 10, "crawlerType": "cheerio"} +run_input = {"startUrls": [{"url": "https://docs.apify.com/"}], "maxCrawlPages": 10, "crawlerType": "cheerio"} actor_call_website_crawler = apify_client.actor("apify/website-content-crawler").call(run_input=run_input) dataset_id = actor_call_website_crawler["defaultDatasetId"] @@ -374,7 +374,7 @@ assistant = client.beta.assistants.update( tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}}, ) -run_input = {"startUrls": [{"url": "https://docs.apify.com/platform"}], "maxCrawlPages": 10, "crawlerType": "cheerio"} +run_input = {"startUrls": [{"url": "https://docs.apify.com/"}], "maxCrawlPages": 10, "crawlerType": "cheerio"} actor_call_website_crawler = apify_client.actor("apify/website-content-crawler").call(run_input=run_input) dataset_id = actor_call_website_crawler["defaultDatasetId"] @@ -411,12 +411,12 @@ for m in client.beta.threads.messages.list(thread_id=run.thread_id): ## Related integrations -- [ChatGPT integration](/platform/integrations/chatgpt) - Add Apify MCP server as a custom connector in ChatGPT -- [OpenAI Agents SDK integration](/platform/integrations/openai-agents) - Integrate Apify MCP server with OpenAI Agents SDK +- [ChatGPT integration](/integrations/chatgpt) - Add Apify MCP server as a custom connector in ChatGPT +- [OpenAI Agents SDK integration](/integrations/openai-agents) - Integrate Apify MCP server with OpenAI Agents SDK ## Resources -- [OpenAI Assistants](https://platform.openai.com/docs/assistants/overview) -- [OpenAI function calling](https://platform.openai.com/docs/assistants/tools/function-calling) +- [OpenAI Assistants](https://.openai.com/docs/assistants/overview) +- [OpenAI function calling](https://.openai.com/docs/assistants/tools/function-calling) - [RAG Web Browser](https://apify.com/apify/rag-web-browser) Actor - [OpenAI Vector Store Integration](https://apify.com/jiri.spilka/openai-vector-store-integration) Actor diff --git a/sources/platform/integrations/ai/openclaw.md b/sources/platform/integrations/ai/openclaw.md index e8b6ee48cc..c3e56ea59c 100644 --- a/sources/platform/integrations/ai/openclaw.md +++ b/sources/platform/integrations/ai/openclaw.md @@ -184,7 +184,7 @@ If you encounter a bug or have a feature request, [open an issue](https://github ## Resources - [OpenClaw documentation](https://docs.openclaw.ai/) - Official OpenClaw docs -- [Apify Actors documentation](https://docs.apify.com/platform/actors) - Learn about Apify Actors +- [Apify Actors documentation](https://docs.apify.com/actors) - Learn about Apify Actors - [Apify Store](https://apify.com/store) - Browse pre-built Actors - [Apify API reference](https://docs.apify.com/api/v2) - Full API documentation - [Apify OpenClaw plugin on GitHub](https://github.com/apify/apify-openclaw-plugin) - Source code and issue tracker diff --git a/sources/platform/integrations/ai/pinecone.md b/sources/platform/integrations/ai/pinecone.md index b45347c224..0ece7b31c7 100644 --- a/sources/platform/integrations/ai/pinecone.md +++ b/sources/platform/integrations/ai/pinecone.md @@ -22,7 +22,7 @@ Before you begin, ensure that you have the following: - A [Pinecone database](https://www.pinecone.io/) and index set up. - A Pinecone index created & Pinecone API token obtained. - An [OpenAI API key](https://openai.com/index/openai-api/) to compute text embeddings. -- An [Apify API token](https://docs.apify.com/platform/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). +- An [Apify API token](https://docs.apify.com/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). ### How to setup Pinecone database and create an index diff --git a/sources/platform/integrations/ai/qdrant.md b/sources/platform/integrations/ai/qdrant.md index bd37461852..b77f671535 100644 --- a/sources/platform/integrations/ai/qdrant.md +++ b/sources/platform/integrations/ai/qdrant.md @@ -22,7 +22,7 @@ Before you begin, ensure that you have the following: - A [Qdrant cluster](https://qdrant.tech) set up. - A Qdrant URL to the database and Qdrant API token. - An [OpenAI API key](https://openai.com/index/openai-api/) to compute text embeddings. -- An [Apify API token](https://docs.apify.com/platform/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). +- An [Apify API token](https://docs.apify.com/integrations/api#api-token) to access [Apify Actors](https://apify.com/store). ### How to setup Qdrant database and create a cluster diff --git a/sources/platform/integrations/ai/skyfire.md b/sources/platform/integrations/ai/skyfire.md index 245fd511a4..c3bbb7ae31 100644 --- a/sources/platform/integrations/ai/skyfire.md +++ b/sources/platform/integrations/ai/skyfire.md @@ -29,7 +29,7 @@ With Skyfire integration, agents can discover available Apify Actors, execute sc ## Use Skyfire with Apify MCP server -The [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) provides the simplest way for agents to access Apify's Actor library using Skyfire payments. +The [Apify MCP server](https://docs.apify.com/integrations/mcp) provides the simplest way for agents to access Apify's Actor library using Skyfire payments. ### Prerequisites @@ -209,9 +209,9 @@ curl -s \ Not all Actors in Apify Store can be run using agentic payments. To be eligible, an Actor must: -- Use the [pay per event](/platform/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. -- Run with [limited permissions](/platform/actors/development/permissions). Actors that request full permissions are excluded. -- Not use [Standby](/platform/actors/running/standby) mode for now. Standby support is coming later. +- Use the [pay per event](/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. +- Run with [limited permissions](/actors/development/permissions). Actors that request full permissions are excluded. +- Not use [Standby](/actors/running/standby) mode for now. Standby support is coming later. Apify maintains a curated list of Actors approved for agentic payments. To check if an Actor supports agentic payments, use the `allowsAgenticUsers=true` query parameter when [searching the store via API](https://docs.apify.com/api/v2#/reference/store/store-actors-collection/get-list-of-actors-in-store). @@ -234,7 +234,7 @@ The following operations are not supported with agentic payments: ## Resources -- **[Model Context Protocol documentation](https://docs.apify.com/platform/integrations/mcp)** - Complete guide to using the Apify MCP server +- **[Model Context Protocol documentation](https://docs.apify.com/integrations/mcp)** - Complete guide to using the Apify MCP server - **[Skyfire documentation](https://skyfire.xyz/)** - Official Skyfire guides and API reference - **[Apify API reference](https://docs.apify.com/api/v2)** - Complete API documentation for direct integration -- **[Actor permissions](https://docs.apify.com/platform/actors/development/permissions)** - Understanding Actor permission levels +- **[Actor permissions](https://docs.apify.com/actors/development/permissions)** - Understanding Actor permission levels diff --git a/sources/platform/integrations/ai/strands-agents.md b/sources/platform/integrations/ai/strands-agents.md index 9a5647136e..9ea25e53e9 100644 --- a/sources/platform/integrations/ai/strands-agents.md +++ b/sources/platform/integrations/ai/strands-agents.md @@ -352,7 +352,7 @@ Fetch the first 50 items from dataset ID 'abc123' and summarize the key findings #### `apify_run_task` -Run a saved [Actor task](/platform/actors/running/tasks) with optional input overrides. Tasks are pre-configured Actor runs saved in Apify Console. +Run a saved [Actor task](/actors/running/tasks) with optional input overrides. Tasks are pre-configured Actor runs saved in Apify Console. | Parameter | Type | Default | Description | | --- | --- | --- | --- | diff --git a/sources/platform/integrations/ai/upsonic.md b/sources/platform/integrations/ai/upsonic.md index 34cec14b59..d18fb4c850 100644 --- a/sources/platform/integrations/ai/upsonic.md +++ b/sources/platform/integrations/ai/upsonic.md @@ -62,7 +62,7 @@ agent = Agent( ], ) -task = Task("What information can you find on https://docs.apify.com/platform/actors?") +task = Task("What information can you find on https://docs.apify.com/actors?") agent.print_do(task) ``` @@ -161,5 +161,5 @@ Browse the [Apify Store](https://apify.com/store) to find Actors for social medi - [Upsonic documentation](https://docs.upsonic.ai) - [Upsonic ApifyTools reference](https://docs.upsonic.ai/concepts/tools/scraping-tools/apify) - [Upsonic restaurant scout example](https://github.com/Upsonic/Examples/tree/master/examples/web_search_and_scraping/apify_google_maps_restaurant_scout) -- [Apify Actor documentation](/platform/actors) +- [Apify Actor documentation](/actors) - [Browse Actors on Apify Store](https://apify.com/store) diff --git a/sources/platform/integrations/ai/vercel-ai-sdk.md b/sources/platform/integrations/ai/vercel-ai-sdk.md index 8a4bd8b8ad..b2d25e3fcc 100644 --- a/sources/platform/integrations/ai/vercel-ai-sdk.md +++ b/sources/platform/integrations/ai/vercel-ai-sdk.md @@ -17,7 +17,7 @@ Apify is a marketplace of ready-to-use web scraping and automation tools, AI age ### Prerequisites -- _Apify API token_: You need an Apify API token set as the `APIFY_TOKEN` environment variable. To obtain your token check [Apify documentation](https://docs.apify.com/platform/integrations/api). +- _Apify API token_: You need an Apify API token set as the `APIFY_TOKEN` environment variable. To obtain your token check [Apify documentation](https://docs.apify.com/integrations/api). - _Node.js packages_: Install the following Node.js packages: ```bash @@ -94,9 +94,9 @@ await mcpClient.close(); ## Resources -- [Apify Actors](https://docs.apify.com/platform/actors) +- [Apify Actors](https://docs.apify.com/actors) - [Vercel AI SDK documentation](https://ai-sdk.dev/docs/introduction) - [What are AI agents?](https://blog.apify.com/what-are-ai-agents/) - [Apify MCP server](https://mcp.apify.com) -- [Apify MCP server documentation](https://docs.apify.com/platform/integrations/mcp) +- [Apify MCP server documentation](https://docs.apify.com/integrations/mcp) - [Apify OpenRouter proxy](https://apify.com/apify/openrouter) diff --git a/sources/platform/integrations/ai/x402.md b/sources/platform/integrations/ai/x402.md index a4d4f1c6ad..5921a77fc5 100644 --- a/sources/platform/integrations/ai/x402.md +++ b/sources/platform/integrations/ai/x402.md @@ -43,7 +43,7 @@ Fund the displayed wallet address with USDC on Base mainnet. ## Use x402 with Apify MCP server -The [Apify MCP server](/platform/integrations/mcp) is the recommended way to get started. `mcpc` handles payment signing and retries automatically. +The [Apify MCP server](/integrations/mcp) is the recommended way to get started. `mcpc` handles payment signing and retries automatically. ### How it works @@ -138,9 +138,9 @@ curl -s \ Not all Actors in Apify Store can be run using agentic payments. To be eligible, an Actor must: -- Use the [pay per event](/platform/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. -- Run with [limited permissions](/platform/actors/development/permissions). Actors that request full permissions are excluded. -- Not use [Standby](/platform/actors/running/standby) mode for now. Standby support is coming later. +- Use the [pay per event](/actors/publishing/monetize/pay-per-event) pricing model. Rental and pay-per-usage Actors are not supported. +- Run with [limited permissions](/actors/development/permissions). Actors that request full permissions are excluded. +- Not use [Standby](/actors/running/standby) mode for now. Standby support is coming later. Apify maintains a curated list of Actors approved for agentic payments. To check if an Actor supports agentic payments, use the `allowsAgenticUsers=true` query parameter when [searching the store via API](https://docs.apify.com/api/v2#/reference/store/store-actors-collection/get-list-of-actors-in-store). @@ -160,6 +160,6 @@ Both paths (MCP server and direct API) share the same pricing model: ## Next steps - Browse [Apify Store](https://apify.com/store) for supported Actors to use with x402. -- Learn more about [Pay Per Event](/platform/actors/publishing/monetize/pay-per-event) pricing for Actors. -- Set up the [Apify MCP server](/platform/integrations/mcp) for automated tool discovery and payment handling. +- Learn more about [Pay Per Event](/actors/publishing/monetize/pay-per-event) pricing for Actors. +- Set up the [Apify MCP server](/integrations/mcp) for automated tool discovery and payment handling. - Read the [x402 protocol specification](https://www.x402.org/) for technical details on the payment standard. diff --git a/sources/platform/integrations/data-and-storage/airbyte.md b/sources/platform/integrations/data-and-storage/airbyte.md index 751d0adef3..b9598353a1 100644 --- a/sources/platform/integrations/data-and-storage/airbyte.md +++ b/sources/platform/integrations/data-and-storage/airbyte.md @@ -38,4 +38,4 @@ To find your Apify API token, you need to navigate to the **Settings** tab and s And that's it! You now have Apify datasets set up as a Source, and you can use Airbyte to transfer your datasets to one of the available destinations. -To learn more about how to setup a Connection, visit [Airbyte's documentation](https://docs.airbyte.com/platform/using-airbyte/getting-started/set-up-a-connection) +To learn more about how to setup a Connection, visit [Airbyte's documentation](https://docs.airbyte.com/using-airbyte/getting-started/set-up-a-connection) diff --git a/sources/platform/integrations/data-and-storage/airtable.md b/sources/platform/integrations/data-and-storage/airtable.md index 372314011e..309cf5322c 100644 --- a/sources/platform/integrations/data-and-storage/airtable.md +++ b/sources/platform/integrations/data-and-storage/airtable.md @@ -7,7 +7,7 @@ slug: /integrations/airtable import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; -The [Airtable Data Import Actor](https://console.apify.com/actors/f4DM1wGmMQdnTLbrE/info/readme?build=latest) transfers items from any Apify dataset into an [Airtable](https://www.airtable.com/) base. Use it standalone or chain it after other Actors in automated workflows via [integrations](/platform/integrations). +The [Airtable Data Import Actor](https://console.apify.com/actors/f4DM1wGmMQdnTLbrE/info/readme?build=latest) transfers items from any Apify dataset into an [Airtable](https://www.airtable.com/) base. Use it standalone or chain it after other Actors in automated workflows via [integrations](/integrations). @@ -205,6 +205,6 @@ After each run, the Actor writes a JSON summary to its dataset. Each field repor ## Next steps -- [Learn about Apify integrations](/platform/integrations) to chain Actors in automated workflows. +- [Learn about Apify integrations](/integrations) to chain Actors in automated workflows. - [Explore Airtable's API documentation](https://airtable.com/developers/web/api/field-model) for field type details. - If you have questions about the Airtable integration, reach out via the support live chat in Console or the [developer community on Discord](https://discord.com/invite/jyEM2PRvMU). diff --git a/sources/platform/integrations/data-and-storage/hubspot.md b/sources/platform/integrations/data-and-storage/hubspot.md index 49b81c7214..4eb96738fd 100644 --- a/sources/platform/integrations/data-and-storage/hubspot.md +++ b/sources/platform/integrations/data-and-storage/hubspot.md @@ -291,5 +291,5 @@ Try re-running with different filters or verify the company website is accessibl ## Next steps - After setting up your first enrichment, browse the [Apify Store](https://apify.com/store) for more scraping Actors. -- If you are building custom workflows, see how to [integrate Actors via API](/platform/integrations/actors/integrating-actors-via-api). +- If you are building custom workflows, see how to [integrate Actors via API](/integrations/actors/integrating-actors-via-api). - For questions or help, contact the Apify team at [integrations@apify.com](mailto:integrations@apify.com) or in the [developer community on Discord](https://discord.com/invite/jyEM2PRvMU). diff --git a/sources/platform/integrations/data-and-storage/index.mdx b/sources/platform/integrations/data-and-storage/index.mdx index 8dab37602d..5d19dfa698 100644 --- a/sources/platform/integrations/data-and-storage/index.mdx +++ b/sources/platform/integrations/data-and-storage/index.mdx @@ -14,28 +14,28 @@ Send Apify Actor output to data warehouses, structured stores, CRMs, and shared diff --git a/sources/platform/integrations/index.mdx b/sources/platform/integrations/index.mdx index 9c90da5a34..4678e2af07 100644 --- a/sources/platform/integrations/index.mdx +++ b/sources/platform/integrations/index.mdx @@ -1,7 +1,8 @@ --- title: Integrations description: Connect the Apify platform to external services, data pipelines, and automation workflows using APIs, webhooks, and third-party integrations. -sidebar_position: 11 +sidebar_label: Overview +sidebar_position: 0 category: platform slug: /integrations --- @@ -19,20 +20,20 @@ Connect Apify Actors to other Actors and tasks to build multi-step workflows dir -[See all Actor integrations →](/platform/integrations/actors) +[See all Actor integrations →](/integrations/actors) ## Programming @@ -42,28 +43,28 @@ Drive the Apify platform programmatically with the REST API, react to platform e -[See all Programming integrations →](/platform/integrations/programming) +[See all Programming integrations →](/integrations/programming) ## AI @@ -73,7 +74,7 @@ Plug Apify Actors into the AI stack - chat clients like Claude and ChatGPT via t -[See all AI integrations →](/platform/integrations/ai) +[See all AI integrations →](/integrations/ai) ## Data and storage @@ -134,34 +135,34 @@ Send Apify Actor output to data warehouses, structured stores, CRMs, and shared -[See all Data and storage integrations →](/platform/integrations/data-and-storage) +[See all Data and storage integrations →](/integrations/data-and-storage) ## Workflows and notifications @@ -171,37 +172,37 @@ Trigger Apify Actors from workflow automation platforms (n8n, Make, and Zapier), -[See all Workflow and notification integrations →](/platform/integrations/workflows-and-notifications) +[See all Workflow and notification integrations →](/integrations/workflows-and-notifications) ## Create a new integration -If you're building a service or platform and want your users to be able to connect it with Apify, [create a new integration](/platform/integrations/integrate). The page walks through both routes - building an integration-ready Actor that other Apify users can plug into their workflows, or connecting your service to Apify externally via the API. +If you're building a service or platform and want your users to be able to connect it with Apify, [create a new integration](/integrations/integrate). The page walks through both routes - building an integration-ready Actor that other Apify users can plug into their workflows, or connecting your service to Apify externally via the API. If your tool isn't listed above, you can also browse [Apify Store](https://apify.com/store) for community-built integration Actors like [MongoDB Import](https://apify.com/drobnikj/mongodb-import) or [MySQL Insert](https://apify.com/petr_cermak/mysql-insert). diff --git a/sources/platform/integrations/integrate-with-apify.md b/sources/platform/integrations/integrate-with-apify.md index 35c1e1a335..245cab5824 100644 --- a/sources/platform/integrations/integrate-with-apify.md +++ b/sources/platform/integrations/integrate-with-apify.md @@ -23,7 +23,7 @@ An Apify integration can be _general_, allowing users to integrate any Actor fro General integrations allow users to integrate Actors into their workflows by connecting Apify with other platforms. Examples include: - [Zapier](./workflows-and-notifications/zapier.md) integration allows Zapier users to enrich their automation workflows with data from the web or to add additional Actions performed by [Apify Actors](https://apify.com/store). -- [Keboola](/platform/integrations/keboola) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. +- [Keboola](/integrations/keboola) integration enables Keboola users to easily pull data crawled from the web into their data pipelines. ### Actor-specific integrations @@ -39,7 +39,7 @@ For more examples both general and Actor-specific, check [integrations](./index. To integrate your service with Apify, you have two options: - Build an external integration using the [Apify API](https://docs.apify.com/api/v2) -- Build an [Apify Actor](https://docs.apify.com/platform/actors) that will be used as integration within [Apify Console](https://console.apify.com) +- Build an [Apify Actor](https://docs.apify.com/actors) that will be used as integration within [Apify Console](https://console.apify.com) ![Integration-ready Actors](./images/integration-ready-actors.png) @@ -60,7 +60,7 @@ Apify supports two main authentication methods for secure API access. _OAuth 2.0_ - Use OAuth 2.0 to allow users to authorize your integration without sharing their credentials. -_API token_ - Apify user generates personal API token from Apify account settings page. For more information, see [API Token documentation](https://docs.apify.com/platform/integrations/api#api-token). +_API token_ - Apify user generates personal API token from Apify account settings page. For more information, see [API Token documentation](https://docs.apify.com/integrations/api#api-token). ### API implementation @@ -77,7 +77,7 @@ Recommended features: - Select Actor: The Actor list will be pre-populated with Actors that the user created or used, using the [List of Actors API](https://docs.apify.com/api/v2/acts-get) and enriched with Actors from the store, which the user has not run already using [API](https://docs.apify.com/api/v2/store-get). - Synchronous vs. asynchronous run: flow will wait until the run/task finishes (consider a timeout on your platform side) - Input UI: upon selecting an Actor, dynamically display specific Actor input and preload default example values based on the Actor Input schema. Alternatively, allow users to insert a JSON input for the Actor. -- Additionally, it should include the option to choose [Actor build](https://docs.apify.com/platform/actors/running/runs-and-builds), [memory](https://docs.apify.com/platform/actors/running/usage-and-resources#memory), and [timeout](https://docs.apify.com/platform/actors/running/usage-and-resources#memory). +- Additionally, it should include the option to choose [Actor build](https://docs.apify.com/actors/running/runs-and-builds), [memory](https://docs.apify.com/actors/running/usage-and-resources#memory), and [timeout](https://docs.apify.com/actors/running/usage-and-resources#memory). - Field mapping: allowing users to map fields to data acquired in previous steps of the workflow. ##### Run a task @@ -183,15 +183,15 @@ These identifiers enable better analytics and support for your integration. For inspiration, check out the public repositories of Apify's existing external integrations: - Zapier - - [Zapier integration documentation](https://docs.apify.com/platform/integrations/zapier) + - [Zapier integration documentation](https://docs.apify.com/integrations/zapier) - [Source code on GitHub](https://github.com/apify/apify-zapier-integration) - Make.com - - [Make.com integration documentation](https://docs.apify.com/platform/integrations/make) + - [Make.com integration documentation](https://docs.apify.com/integrations/make) - Kestra - [Kestra integration documentation](https://kestra.io/plugins/plugin-apify) - [Source code on GitHub](https://github.com/kestra-io/plugin-apify) - Keboola - - [Keboola integration documentation](https://docs.apify.com/platform/integrations/keboola) + - [Keboola integration documentation](https://docs.apify.com/integrations/keboola) - [Source code on GitHub](https://github.com/apify/keboola-ex-apify/) (JavaScript) - [Google Maps Reviews Scraper integration](https://github.com/apify/keboola-gmrs/) (Actor-specific) - Airbyte diff --git a/sources/platform/integrations/programming/api.md b/sources/platform/integrations/programming/api.md index 7fe6c6af77..e9db12399e 100644 --- a/sources/platform/integrations/programming/api.md +++ b/sources/platform/integrations/programming/api.md @@ -152,7 +152,7 @@ When you run an Actor with a scoped token in this mode, Apify will inject a toke This way you can be sure that Actors won't accidentally - or intentionally - access any data they shouldn't. However, Actors might not function properly if the scope is not sufficient. :::caution Standby mode limitation -Restricted access mode is not supported for Actors running in [Standby mode](/platform/actors/running/standby). While you can send standby requests using a scoped token configured with restricted access, functionality is not guaranteed. +Restricted access mode is not supported for Actors running in [Standby mode](/actors/running/standby). While you can send standby requests using a scoped token configured with restricted access, functionality is not guaranteed. ::: :::tip Transitive restrictions @@ -161,7 +161,7 @@ This restriction is _transitive_, which means that if the Actor runs another Act #### Default run storages -When Apify [runs an Actor](/platform/actors/running/runs-and-builds#runs), it automatically creates a set of default storages (a dataset, a key-value store and request queue) that the Actor can use in runtime. +When Apify [runs an Actor](/actors/running/runs-and-builds#runs), it automatically creates a set of default storages (a dataset, a key-value store and request queue) that the Actor can use in runtime. You can configure whether the scoped token you are going use to run the Actor should get access to these default storages. @@ -171,7 +171,7 @@ If it’s **on**, the token can implicitly access the default storage of the Act If the toggle is **off**, the token can still trigger and inspect runs, but access to the default storages is restricted: -- For accounts with **Restricted general resource access**, the token cannot read or write to default storages. [Learn more about restricted general resource access](/platform/collaboration/general-resource-access). +- For accounts with **Restricted general resource access**, the token cannot read or write to default storages. [Learn more about restricted general resource access](/account/collaboration/general-resource-access). - For accounts with **Unrestricted general resource access**, the default storages can still be read anonymously using their IDs, but writing is prevented. :::tip Clean up run data diff --git a/sources/platform/integrations/programming/github.md b/sources/platform/integrations/programming/github.md index 61a76eb1ac..90b3d62a01 100644 --- a/sources/platform/integrations/programming/github.md +++ b/sources/platform/integrations/programming/github.md @@ -5,7 +5,7 @@ sidebar_label: GitHub slug: /integrations/github --- -With the Apify integration for [GitHub](https://github.com/), you can create an Actor from a public or private repository, rebuild it automatically on every push, and trigger workflows in your repo when an Actor run fails, succeeds, or times out. To run automated tests and multi-branch builds with GitHub Actions, see [Continuous integration for Actors](/platform/actors/development/deployment/continuous-integration). +With the Apify integration for [GitHub](https://github.com/), you can create an Actor from a public or private repository, rebuild it automatically on every push, and trigger workflows in your repo when an Actor run fails, succeeds, or times out. To run automated tests and multi-branch builds with GitHub Actions, see [Continuous integration for Actors](/actors/development/deployment/continuous-integration). ## Create an Actor from a GitHub repository @@ -44,7 +44,7 @@ Apify creates the Actor as soon as you select a repository, links its source to :::tip Private repositories -For private repositories, configure a [deployment key](/platform/actors/development/deployment/source-types#private-repositories) so Apify can clone the code. +For private repositories, configure a [deployment key](/actors/development/deployment/source-types#private-repositories) so Apify can clone the code. ::: @@ -69,7 +69,7 @@ After you link an Actor to a GitHub repository, add a webhook in GitHub to trigg Every push to the repository now triggers a build of the linked Actor version. -For automated tests and multi-branch workflows (for example, separate `latest` and `beta` tags), follow the [Continuous integration for Actors](/platform/actors/development/deployment/continuous-integration) guide. +For automated tests and multi-branch workflows (for example, separate `latest` and `beta` tags), follow the [Continuous integration for Actors](/actors/development/deployment/continuous-integration) guide. ## Create a GitHub issue when an Actor run fails @@ -129,7 +129,7 @@ Enable **Interpolate variables in string fields**, then set **Payload template** } ``` -For the full list of variables you can use, see [Webhook actions](/platform/integrations/webhooks/actions#available-variables). +For the full list of variables you can use, see [Webhook actions](/integrations/webhooks/actions#available-variables). ### Step 4: Save and test the webhook @@ -141,6 +141,6 @@ If the test fails, check the webhook **Dispatches** log for the response from Gi ## Resources -- [Source types for Actors](/platform/actors/development/deployment/source-types) - Configure the Git URL, branch, and monorepo paths. -- [Continuous integration for Actors](/platform/actors/development/deployment/continuous-integration) - Run tests and trigger builds with GitHub Actions. -- [Webhook events](/platform/integrations/webhooks/events) and [actions](/platform/integrations/webhooks/actions) - Reference for available events and the payload template. +- [Source types for Actors](/actors/development/deployment/source-types) - Configure the Git URL, branch, and monorepo paths. +- [Continuous integration for Actors](/actors/development/deployment/continuous-integration) - Run tests and trigger builds with GitHub Actions. +- [Webhook events](/integrations/webhooks/events) and [actions](/integrations/webhooks/actions) - Reference for available events and the payload template. diff --git a/sources/platform/integrations/programming/index.mdx b/sources/platform/integrations/programming/index.mdx index 90706b0595..50568640d7 100644 --- a/sources/platform/integrations/programming/index.mdx +++ b/sources/platform/integrations/programming/index.mdx @@ -14,21 +14,21 @@ Drive the Apify platform programmatically with the REST API, react to platform e diff --git a/sources/platform/integrations/programming/webhooks/actions.md b/sources/platform/integrations/programming/webhooks/actions.md index 40933972f6..c84129b0e5 100644 --- a/sources/platform/integrations/programming/webhooks/actions.md +++ b/sources/platform/integrations/programming/webhooks/actions.md @@ -47,7 +47,7 @@ For security reasons, include a secret token in the webhook URL to ensure that o :::tip Headers template -You can also use [Headers template](/platform/integrations/webhooks/actions#headers-template) for this purpose. +You can also use [Headers template](/integrations/webhooks/actions#headers-template) for this purpose. ::: @@ -169,8 +169,8 @@ The description is an optional string that you can add to the webhook. It serves | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `userId` | string | ID of the Apify user who owns the webhook. | | `createdAt` | string | ISO string date of the webhook's trigger event. | -| `eventType` | string | Type of the trigger event, see [Events](/platform/integrations/webhooks/events). | -| `eventData` | Object | Data associated with the trigger event, see [Events](/platform/integrations/webhooks/events). | +| `eventType` | string | Type of the trigger event, see [Events](/integrations/webhooks/events). | +| `eventData` | Object | Data associated with the trigger event, see [Events](/integrations/webhooks/events). | | `resource` | Object | The resource that caused the trigger event. | | `globals` | Object | Data available in global context. Contains `dateISO` (date of webhook's trigger event in ISO 8601 format) and `dateUnix` (date of trigger event in Unix time in seconds) | diff --git a/sources/platform/integrations/programming/webhooks/events.md b/sources/platform/integrations/programming/webhooks/events.md index 2271ffbe8d..9cd885694a 100644 --- a/sources/platform/integrations/programming/webhooks/events.md +++ b/sources/platform/integrations/programming/webhooks/events.md @@ -37,7 +37,7 @@ To fetch the results from the Actor run, you can use the `actorRunId` event prop https://api.apify.com/v2/actor-runs/[ACTOR_RUN_ID]/dataset/items?token=[TOKEN] ``` -Apart from the event data, actions also have the `resource` object available, which can provide more details about the object that triggered the event. For more information about the `resource` objects, see the [Webhooks Actions page](/platform/integrations/webhooks/actions#resource) +Apart from the event data, actions also have the `resource` object available, which can provide more details about the object that triggered the event. For more information about the `resource` objects, see the [Webhooks Actions page](/integrations/webhooks/actions#resource) ## Actor build events diff --git a/sources/platform/integrations/programming/webhooks/index.md b/sources/platform/integrations/programming/webhooks/index.md index 2148788956..79c16fc8ae 100644 --- a/sources/platform/integrations/programming/webhooks/index.md +++ b/sources/platform/integrations/programming/webhooks/index.md @@ -19,6 +19,6 @@ To define a webhook, select a system **event** that triggers the webhook. Then, ::: -* [**Events**](/platform/integrations/webhooks/events) -* [**Actions**](/platform/integrations/webhooks/actions) -* [**Ad-hoc webhooks**](/platform/integrations/webhooks/ad-hoc-webhooks) +* [**Events**](/integrations/webhooks/events) +* [**Actions**](/integrations/webhooks/actions) +* [**Ad-hoc webhooks**](/integrations/webhooks/ad-hoc-webhooks) diff --git a/sources/platform/integrations/workflows-and-notifications/activepieces.md b/sources/platform/integrations/workflows-and-notifications/activepieces.md index aaa6a9f973..92cbd06e77 100644 --- a/sources/platform/integrations/workflows-and-notifications/activepieces.md +++ b/sources/platform/integrations/workflows-and-notifications/activepieces.md @@ -31,7 +31,7 @@ Before using the Apify piece in Activepieces, you need: - An [Apify account](https://console.apify.com/) - An [Activepieces account](https://www.activepieces.com/) or self-hosted instance -- An Apify [API key](/platform/integrations/api#api-token) with access to the Actors, tasks, and storages you want to use +- An Apify [API key](/integrations/api#api-token) with access to the Actors, tasks, and storages you want to use ## Connect Apify with Activepieces @@ -136,7 +136,7 @@ Both triggers create and manage Apify webhooks automatically when you enable or - **Build**, **Memory**, **Timeout** - **Wait for finish** behavior similar to **Run Actor**. -- **Get Dataset Items** retrieves items from an Apify [dataset](/platform/storage/dataset): +- **Get Dataset Items** retrieves items from an Apify [dataset](/storage/dataset): - Choose a dataset from your account. - Configure `offset` and `limit` to page through items. - Returns dataset items, their count, and the dataset ID. @@ -146,7 +146,7 @@ Both triggers create and manage Apify webhooks automatically when you enable or - Lets you choose a **crawler type** (e.g., Cheerio, JSDOM, Playwright variants). - Returns the Actor run details and the scraped items (HTML and markdown). -- **Get Key-Value Store Record** retrieves a value from an Apify [key-value store](/platform/storage/key-value-store): +- **Get Key-Value Store Record** retrieves a value from an Apify [key-value store](/storage/key-value-store): - Select a key-value store. - Select a record key from that store. - Returns the value as JSON, text, or a file reference, depending on its type. diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/index.md b/sources/platform/integrations/workflows-and-notifications/gumloop/index.md index 95d1838c8b..a111979799 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/index.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/index.md @@ -24,10 +24,10 @@ These native nodes eliminate the complexity of managing Apify tasks while provid The following data sources are available natively in Gumloop: -- [Instagram](/platform/integrations/gumloop/instagram) -- [Google Maps](/platform/integrations/gumloop/maps) -- [TikTok](/platform/integrations/gumloop/tiktok) -- [YouTube](/platform/integrations/gumloop/youtube) +- [Instagram](/integrations/gumloop/instagram) +- [Google Maps](/integrations/gumloop/maps) +- [TikTok](/integrations/gumloop/tiktok) +- [YouTube](/integrations/gumloop/youtube) ### Gumloop credits diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/instagram.md b/sources/platform/integrations/workflows-and-notifications/gumloop/instagram.md index 053cda39e8..e1f7d79eb1 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/instagram.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/instagram.md @@ -73,6 +73,6 @@ You can pull the following types of data from public Instagram accounts using Gu ## Other integrations -- [TikTok](/platform/integrations/gumloop/tiktok) -- [YouTube](/platform/integrations/gumloop/youtube) -- [Google Maps](/platform/integrations/gumloop/maps) +- [TikTok](/integrations/gumloop/tiktok) +- [YouTube](/integrations/gumloop/youtube) +- [Google Maps](/integrations/gumloop/maps) diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md b/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md index b65cfa0fb3..fb5d649046 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md @@ -70,6 +70,6 @@ You can pull the following types of place data from Google Maps using Gumloop’ ## Other integrations -- [TikTok](/platform/integrations/gumloop/tiktok) -- [Instagram](/platform/integrations/gumloop/instagram) -- [YouTube](/platform/integrations/gumloop/youtube) +- [TikTok](/integrations/gumloop/tiktok) +- [Instagram](/integrations/gumloop/instagram) +- [YouTube](/integrations/gumloop/youtube) diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md b/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md index b33fcbf792..dc866e7b33 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md @@ -69,6 +69,6 @@ You can pull the following types of data from TikTok using Gumloop’s TikTok no ## Other integrations -- [Instagram](/platform/integrations/gumloop/instagram) -- [YouTube](/platform/integrations/gumloop/youtube) -- [Google Maps](/platform/integrations/gumloop/maps) +- [Instagram](/integrations/gumloop/instagram) +- [YouTube](/integrations/gumloop/youtube) +- [Google Maps](/integrations/gumloop/maps) diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/youtube.md b/sources/platform/integrations/workflows-and-notifications/gumloop/youtube.md index ef780ebc26..b0485745e1 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/youtube.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/youtube.md @@ -70,7 +70,7 @@ You can pull the following types of data from YouTube using Gumloop’s YouTube ## Other integrations -- [TikTok](/platform/integrations/gumloop/tiktok) -- [Instagram](/platform/integrations/gumloop/instagram) -- [Google Maps](/platform/integrations/gumloop/maps) +- [TikTok](/integrations/gumloop/tiktok) +- [Instagram](/integrations/gumloop/instagram) +- [Google Maps](/integrations/gumloop/maps) diff --git a/sources/platform/integrations/workflows-and-notifications/ifttt.md b/sources/platform/integrations/workflows-and-notifications/ifttt.md index 579ce45ccd..4ea7fcb3c3 100644 --- a/sources/platform/integrations/workflows-and-notifications/ifttt.md +++ b/sources/platform/integrations/workflows-and-notifications/ifttt.md @@ -92,8 +92,8 @@ To use Apify as an action in your Applet: | --- | --- | --- | | **Wait until run finishes** | Defines how the Actor should be executed. | `yes`, `no` | | **Input overrides** | JSON input that overrides the Actor's default input. | `{"key": "value"}` | - | **Build** | Specifies the Actor build to run. Can be a build tag or build number. See [Builds](/platform/actors/running/runs-and-builds#builds) for more information. | `0.2.10`, `version-0` | - | **Memory** | Memory limit for the run in megabytes. See [Memory](/platform/actors/running/usage-and-resources#memory) for more information. | `256` | + | **Build** | Specifies the Actor build to run. Can be a build tag or build number. See [Builds](/actors/running/runs-and-builds#builds) for more information. | `0.2.10`, `version-0` | + | **Memory** | Memory limit for the run in megabytes. See [Memory](/actors/running/usage-and-resources#memory) for more information. | `256` | 1. Click **Create action** to finish setting up the action. @@ -124,9 +124,9 @@ To check if your Applet is working properly: ### Queries -- **Get Dataset Items**: Retrieves items from a [dataset](/platform/storage/dataset) +- **Get Dataset Items**: Retrieves items from a [dataset](/storage/dataset) - **Scrape Single URL**: Runs a scraper for a specified website and returns its content -- **Get Key-Value Store Record**: Retrieves a value from a [key-value store](/platform/storage/key-value-store) +- **Get Key-Value Store Record**: Retrieves a value from a [key-value store](/storage/key-value-store) ## Troubleshooting diff --git a/sources/platform/integrations/workflows-and-notifications/index.mdx b/sources/platform/integrations/workflows-and-notifications/index.mdx index 055c8ea14a..2faada9a81 100644 --- a/sources/platform/integrations/workflows-and-notifications/index.mdx +++ b/sources/platform/integrations/workflows-and-notifications/index.mdx @@ -14,28 +14,28 @@ Trigger Apify Actors from workflow automation platforms (n8n, Make, and Zapier), diff --git a/sources/platform/integrations/workflows-and-notifications/make/ai-crawling.md b/sources/platform/integrations/workflows-and-notifications/make/ai-crawling.md index ed56b0e7e5..e6fa8067f4 100644 --- a/sources/platform/integrations/workflows-and-notifications/make/ai-crawling.md +++ b/sources/platform/integrations/workflows-and-notifications/make/ai-crawling.md @@ -16,7 +16,7 @@ Use the Apify Scraper for AI Crawling module in [Make](https://www.make.com/) to Apify Scraper for AI Crawling from [Apify](https://apify.com/) lets you extract text content from websites to feed AI models, LLM applications, vector databases, or Retrieval Augmented Generation (RAG) pipelines. It supports rich formatting using Markdown, cleans the HTML of irrelevant elements, downloads linked files, and integrates with AI ecosystems like LangChain, LlamaIndex, and other LLM frameworks. -To use these modules, you need an [Apify account](https://console.apify.com) and an [API token](https://docs.apify.com/platform/integrations/api#api-token). You can find your token in the [Apify Console](https://console.apify.com/) under **Settings > API & Integrations**. After connecting, you can automate content extraction at scale and incorporate the results into your AI workflows. +To use these modules, you need an [Apify account](https://console.apify.com) and an [API token](https://docs.apify.com/integrations/api#api-token). You can find your token in the [Apify Console](https://console.apify.com/) under **Settings > API & Integrations**. After connecting, you can automate content extraction at scale and incorporate the results into your AI workflows. ## Connect Apify Scraper for AI Crawling diff --git a/sources/platform/integrations/workflows-and-notifications/make/index.md b/sources/platform/integrations/workflows-and-notifications/make/index.md index ff6fa4b33c..a2f152f100 100644 --- a/sources/platform/integrations/workflows-and-notifications/make/index.md +++ b/sources/platform/integrations/workflows-and-notifications/make/index.md @@ -142,4 +142,4 @@ You can initiate the Actor run via Apify Console, a scheduler, or from another M ### Searches -- **Get Dataset Items:** Retrieves items from a [dataset](/platform/storage/dataset). +- **Get Dataset Items:** Retrieves items from a [dataset](/storage/dataset). diff --git a/sources/platform/integrations/workflows-and-notifications/make/llm.md b/sources/platform/integrations/workflows-and-notifications/make/llm.md index 4f853013a4..8803608a3e 100644 --- a/sources/platform/integrations/workflows-and-notifications/make/llm.md +++ b/sources/platform/integrations/workflows-and-notifications/make/llm.md @@ -16,7 +16,7 @@ Use the Apify Scraper for LLMs module in [Make](https://www.make.com/) to query Apify Scraper for LLMs from [Apify](https://apify.com) is a web browsing module for OpenAI Assistants, RAG pipelines, and AI agents. It can query Google Search, scrape the top results, and return page content as Markdown for downstream AI processing. -To use these modules, you need an [Apify account](https://console.apify.com) and an [API token](https://docs.apify.com/platform/integrations/api#api-token). You can find your token in Apify Console under **Settings > API & Integrations**. After connecting, you can automate content extraction and integrate results into your AI workflows. +To use these modules, you need an [Apify account](https://console.apify.com) and an [API token](https://docs.apify.com/integrations/api#api-token). You can find your token in Apify Console under **Settings > API & Integrations**. After connecting, you can automate content extraction and integrate results into your AI workflows. ## Connect Apify Scraper for LLMs diff --git a/sources/platform/integrations/workflows-and-notifications/n8n/index.md b/sources/platform/integrations/workflows-and-notifications/n8n/index.md index ecf7835aaa..2fa75a269a 100644 --- a/sources/platform/integrations/workflows-and-notifications/n8n/index.md +++ b/sources/platform/integrations/workflows-and-notifications/n8n/index.md @@ -116,7 +116,7 @@ Actions allow you to perform operations like running an Actor within a workflow. 1. Click **Add Node**, search for **Apify**, and select it. 1. Select any operation. In this example we will use **Run Actor**. 1. Configure it: - - **Custom input**: JSON input for the Actor run, which you can find on the Actor input page in Apify Console. See [Inputs](/platform/actors/running/input-and-output#input) for more information. If empty, the run uses the input specified in the default run configuration + - **Custom input**: JSON input for the Actor run, which you can find on the Actor input page in Apify Console. See [Inputs](/actors/running/input-and-output#input) for more information. If empty, the run uses the input specified in the default run configuration - **Timeout**: Timeout for the Actor run in seconds. Zero value means there is no timeout - **Memory**: Amount of memory allocated for the Actor run, in megabytes - **Build Tag**: Specifies the Actor build tag to run. By default, the run uses the build specified in the default run configuration for the Actor (typically `latest`) @@ -184,11 +184,11 @@ Pull data from Apify storage. #### Datasets -- **Get Items**: Retrieves items from a [dataset](/platform/storage/dataset) +- **Get Items**: Retrieves items from a [dataset](/storage/dataset) #### Key-Value Stores -- **Get Record**: Retrieves a value from a [key-value store](/platform/storage/key-value-store) +- **Get Record**: Retrieves a value from a [key-value store](/storage/key-value-store) ### Triggers diff --git a/sources/platform/integrations/workflows-and-notifications/n8n/website-content-crawler.md b/sources/platform/integrations/workflows-and-notifications/n8n/website-content-crawler.md index 848b636c95..1c1de0429d 100644 --- a/sources/platform/integrations/workflows-and-notifications/n8n/website-content-crawler.md +++ b/sources/platform/integrations/workflows-and-notifications/n8n/website-content-crawler.md @@ -10,7 +10,7 @@ import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integrati Website Content Crawler from [Apify](https://apify.com/apify/website-content-crawler) lets you extract text content from websites to feed AI models, LLM applications, vector databases, or Retrieval Augmented Generation (RAG) pipelines. It supports rich formatting using Markdown, cleans the HTML of irrelevant elements, downloads linked files, and integrates with AI ecosystems like Langchain, LlamaIndex, and other LLM frameworks. -To use these modules, you need an [API token](https://docs.apify.com/platform/integrations/api#api-token). You can find your token in the [Apify Console](https://console.apify.com/) under **Settings > API & Integrations**. After connecting, you can automate content extraction at scale and incorporate the results into your AI workflows. +To use these modules, you need an [API token](https://docs.apify.com/integrations/api#api-token). You can find your token in the [Apify Console](https://console.apify.com/) under **Settings > API & Integrations**. After connecting, you can automate content extraction at scale and incorporate the results into your AI workflows. diff --git a/sources/platform/integrations/workflows-and-notifications/pipedream.md b/sources/platform/integrations/workflows-and-notifications/pipedream.md index 7aff1d8336..a2f6f70358 100644 --- a/sources/platform/integrations/workflows-and-notifications/pipedream.md +++ b/sources/platform/integrations/workflows-and-notifications/pipedream.md @@ -71,9 +71,9 @@ Before you begin, make sure you have: - **Run task** - Runs a selected Actor task and optionally waits for it to finish. - **Run task synchronously** - Runs a selected task and returns its dataset items when it finishes. - **Scrape single URL** - Runs a scraper on a specified URL and returns its content as HTML. Use this for extracting content from a single page, e.g. in LLM workflows. -- **Get dataset items** - Retrieves items from a [dataset](/platform/storage/dataset). -- **Get key-value store record** - Retrieves a record from a [key-value store](/platform/storage/key-value-store). -- **Set key-value store record** - Creates or updates a record in a [key-value store](/platform/storage/key-value-store). +- **Get dataset items** - Retrieves items from a [dataset](/storage/dataset). +- **Get key-value store record** - Retrieves a record from a [key-value store](/storage/key-value-store). +- **Set key-value store record** - Creates or updates a record in a [key-value store](/storage/key-value-store). ## Resources diff --git a/sources/platform/integrations/workflows-and-notifications/slack.md b/sources/platform/integrations/workflows-and-notifications/slack.md index 55c2755d12..6fa88dc24d 100644 --- a/sources/platform/integrations/workflows-and-notifications/slack.md +++ b/sources/platform/integrations/workflows-and-notifications/slack.md @@ -48,7 +48,7 @@ You're all set! If you have questions or need help, reach out on the [Apify Disc The **Message** field on the Slack integration setup screen accepts a [Handlebars](https://handlebarsjs.com/) template. When the integration fires, Apify renders the template with data from the triggering event and posts the result to the configured channel. -The Slack integration uses Handlebars, so all built-in helpers (`{{#if}}`, `{{#each}}`, `{{#unless}}`, and so on) work in your template. [Webhook actions](/platform/integrations/webhooks/actions) use a separate JSON payload template engine; don't mix the two. +The Slack integration uses Handlebars, so all built-in helpers (`{{#if}}`, `{{#each}}`, `{{#unless}}`, and so on) work in your template. [Webhook actions](/integrations/webhooks/actions) use a separate JSON payload template engine; don't mix the two. A few rules apply to every template: @@ -65,7 +65,7 @@ The following variables are available in every template. Reference nested fields | Variable | Type | Description | |---------------|----------|----------------------------------------------------------------------------------------------------------------------------| | `userId` | string | ID of the Apify user who owns the integration. | -| `eventType` | string | Type of the trigger event. See [Webhook events](/platform/integrations/webhooks/events) for the full list. | +| `eventType` | string | Type of the trigger event. See [Webhook events](/integrations/webhooks/events) for the full list. | | `createdAt` | string | ISO 8601 timestamp of when the event was dispatched. | | `eventData` | object | Identifiers of the entities involved in the event. | | `resource` | object | Full snapshot of the triggering resource (an Actor run or an Actor build). | diff --git a/sources/platform/integrations/workflows-and-notifications/windmill.md b/sources/platform/integrations/workflows-and-notifications/windmill.md index 5e859e9df9..5ccda051e3 100644 --- a/sources/platform/integrations/workflows-and-notifications/windmill.md +++ b/sources/platform/integrations/workflows-and-notifications/windmill.md @@ -225,8 +225,8 @@ The Apify integration provides several operations you can use in your Windmill w - [Windmill Documentation](https://www.windmill.dev/docs/) - [Windmill Local Development](https://www.windmill.dev/docs/advanced/local_development) - [Apify API Documentation](https://docs.apify.com) -- [Apify Webhooks](/platform/integrations/webhooks) -- [Apify Actors & Tasks](/platform/actors) +- [Apify Webhooks](/integrations/webhooks) +- [Apify Actors & Tasks](/actors) ## Troubleshooting diff --git a/sources/platform/integrations/workflows-and-notifications/zapier.md b/sources/platform/integrations/workflows-and-notifications/zapier.md index 38602de9be..08ef754d81 100644 --- a/sources/platform/integrations/workflows-and-notifications/zapier.md +++ b/sources/platform/integrations/workflows-and-notifications/zapier.md @@ -118,13 +118,13 @@ Once you are happy with the test, you can publish the Zap. When it is turned on, ### Set Key-Value Store Record -> Sets a value to a [Key-value store](/platform/storage/key-value-store). +> Sets a value to a [Key-value store](/storage/key-value-store). ## Searches ### Fetch dataset items -> Retrieves items from a [dataset](/platform/storage/dataset). +> Retrieves items from a [dataset](/storage/dataset). ### Find last Actor run @@ -136,6 +136,6 @@ Once you are happy with the test, you can publish the Zap. When it is turned on, ### Get Key-Value Store Record -> Retrieves value from a [Key-value store](/platform/storage/key-value-store). +> Retrieves value from a [Key-value store](/storage/key-value-store). If you have any questions or need help, feel free to reach out to us on our [developer community on Discord](https://discord.com/invite/jyEM2PRvMU). diff --git a/sources/platform/limits.md b/sources/platform/limits.md index 8ecd075df5..8de676cf19 100644 --- a/sources/platform/limits.md +++ b/sources/platform/limits.md @@ -128,7 +128,7 @@ The tables below demonstrate the Apify platform's default resource limits. For A ## Usage limit -To protect you from accidental overspending, the Apify platform introduces usage limits based on your billing plan. For details, see [Limits](./console/billing.md#limits). +To protect you from accidental overspending, the Apify platform introduces usage limits based on your billing plan. For details, see [Limits](/account/billing#limits). ## Increase limits diff --git a/sources/platform/proxy/index.md b/sources/platform/proxy/index.md index 4c01e0ceb1..ed160dab01 100644 --- a/sources/platform/proxy/index.md +++ b/sources/platform/proxy/index.md @@ -1,7 +1,8 @@ --- title: Proxy description: Learn to anonymously access websites in scraping/automation jobs. Improve data outputs and efficiency of bots, and access websites from various geographies. -sidebar_position: 10 +sidebar_label: Overview +sidebar_position: 0 category: platform slug: /proxy --- @@ -23,17 +24,17 @@ Each proxy type has distinct advantages, disadvantages, and pricing. Use them to @@ -229,7 +230,7 @@ Use [sessions](#sessions) to control how you rotate IP addresses. See the guide Sessions allow you to use the same IP address for multiple connections. When you need to keep a session (for example, to stay logged in to a website), keep the same proxy, and so the same IP address. Switching the IP address, by contrast, helps you avoid being blocked. -To set a new session, pass the `session` parameter in your [username](#username-parameters) field when connecting to a proxy. This will serve as the session's ID and an IP address will be assigned to it. To [use that IP address in other requests](/platform/proxy/datacenter-proxy#connecting-to-datacenter-proxies), pass that same session ID in the username field. +To set a new session, pass the `session` parameter in your [username](#username-parameters) field when connecting to a proxy. This will serve as the session's ID and an IP address will be assigned to it. To [use that IP address in other requests](/proxy/datacenter-proxy#connecting-to-datacenter-proxies), pass that same session ID in the username field. We recommend the [SessionPool](https://crawlee.dev/api/core/class/SessionPool) abstraction for managing sessions. The created session will then store information such as cookies and can be used to generate [browser fingerprints](/academy/anti-scraping/mitigation/generating-fingerprints). You can also assign custom user data such as authorization tokens and specific headers. Sessions are available for [datacenter](./datacenter_proxy.md) and [residential](./residential_proxy.md#session-persistence) proxies. For datacenter proxies, a session persists for **26 hours** ([more info](./datacenter_proxy.md)). For residential proxies, it persists for **1 minute** ([more info](./residential_proxy.md#session-persistence)) but you can prolong the lifetime by regularly using the session. Google SERP proxies do not support sessions. diff --git a/sources/platform/sidebars.js b/sources/platform/sidebars.js index 8494ebdd6a..155f757437 100644 --- a/sources/platform/sidebars.js +++ b/sources/platform/sidebars.js @@ -1,8 +1,8 @@ module.exports = { - docs: [ - { - type: 'autogenerated', - dirName: '.', - }, - ], + getStarted: [{ type: 'autogenerated', dirName: 'get-started' }], + actors: [{ type: 'autogenerated', dirName: 'actors' }], + storage: [{ type: 'autogenerated', dirName: 'storage' }], + proxy: [{ type: 'autogenerated', dirName: 'proxy' }], + integrations: [{ type: 'autogenerated', dirName: 'integrations' }], + account: [{ type: 'autogenerated', dirName: 'account' }], }; diff --git a/sources/platform/storage/dataset.md b/sources/platform/storage/dataset.md index 89a77cb28f..cf99be187e 100644 --- a/sources/platform/storage/dataset.md +++ b/sources/platform/storage/dataset.md @@ -15,7 +15,7 @@ Typically, datasets comprise results from web scraping, crawling, and data proce :::info Retention period -Named datasets are retained indefinitely. Unnamed datasets expire after 7 days unless otherwise specified. [Learn more](/platform/storage#named-and-unnamed-storages) +Named datasets are retained indefinitely. Unnamed datasets expire after 7 days unless otherwise specified. [Learn more](/storage#named-and-unnamed-storages) ::: @@ -25,7 +25,7 @@ Dataset storage is _append-only_ - data can only be added and cannot be modified ## Dataset schema -Actors can define a [dataset schema](/platform/actors/development/actor-definition/dataset-schema) that describes the structure of each dataset item and controls how data appears in the Output tab. The schema has two components: +Actors can define a [dataset schema](/actors/development/actor-definition/dataset-schema) that describes the structure of each dataset item and controls how data appears in the Output tab. The schema has two components: - `fields` - JSON Schema describing each item's structure, enabling validation and providing metadata for AI agents - `views` - Display configurations that control field ordering, formatting, and presentation in the Console @@ -53,7 +53,7 @@ To view or download a dataset: 1. Browse the data in **Table** or **JSON** view. 1. Click **Export** to download the data in your preferred format. -Utilize the **Actions** menu to modify the dataset's name, which also affects its [retention period](/platform/storage#data-retention), and to adjust [access rights](../collaboration/index.md). The **API** button allows you to explore and test the dataset's [API endpoints](/api/v2/storage-datasets). +Utilize the **Actions** menu to modify the dataset's name, which also affects its [retention period](/storage#data-retention), and to adjust [access rights](/account/collaboration). The **API** button allows you to explore and test the dataset's [API endpoints](/api/v2/storage-datasets). ![Datasets detail view](./images/datasets-detail.png) @@ -418,11 +418,11 @@ By default, the whole result is wrapped in an `` element, while each pag ## Share -You can grant [access rights](../collaboration/index.md) to your dataset through the **Share** button under the **Actions** menu. For more details, check the [full list of permissions](../collaboration/list_of_permissions.md). +You can grant [access rights](/account/collaboration) to your dataset through the **Share** button under the **Actions** menu. For more details, check the [full list of permissions](/account/collaboration/list-of-permissions). -You can also share datasets by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/platform/collaboration/general-resource-access). +You can also share datasets by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/account/collaboration/general-resource-access). -For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/platform/collaboration/general-resource-access#pre-signed-urls). +For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/account/collaboration/general-resource-access#pre-signed-urls). ### Share datasets between runs @@ -480,7 +480,7 @@ other_dataset_client = apify_client.dataset('jane-doe/old-dataset') The same applies for the [Apify API](#apify-api) - you can use [the same endpoints](#apify-api) as you would normally do. -See the [Storage overview](/platform/storage#share-storages-between-runs) for details on sharing storages between runs. +See the [Storage overview](/storage#share-storages-between-runs) for details on sharing storages between runs. ## Limits diff --git a/sources/platform/storage/index.md b/sources/platform/storage/index.md index 852e10629d..da913f1041 100644 --- a/sources/platform/storage/index.md +++ b/sources/platform/storage/index.md @@ -1,7 +1,8 @@ --- title: Storage description: Store anything from images and key-value pairs to structured output data. Learn how to access and manage your stored data from the Apify platform or via API. -sidebar_position: 9 +sidebar_label: Overview +sidebar_position: 0 category: platform slug: /storage --- @@ -18,17 +19,17 @@ The Apify platform provides three types of storage, accessible from [Apify Conso @@ -178,11 +179,11 @@ Go to the [API documentation](/api/v2#rate-limiting) for details and to learn wh ## Share -You can grant [access rights](../collaboration/index.md) to other Apify users to view or modify your storages. Check the [full list of permissions](../collaboration/list_of_permissions.md). +You can grant [access rights](/account/collaboration) to other Apify users to view or modify your storages. Check the [full list of permissions](/account/collaboration/list-of-permissions). -You can also share storages by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/platform/collaboration/general-resource-access). +You can also share storages by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/account/collaboration/general-resource-access). -For one-off sharing when access is restricted, generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/platform/collaboration/general-resource-access#pre-signed-urls). +For one-off sharing when access is restricted, generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/account/collaboration/general-resource-access#pre-signed-urls). :::tip Accessing restricted storage resources via API @@ -206,7 +207,7 @@ When multiple runs write to a storage simultaneously, the order of writes is not :::info Accessing restricted storage resources between runs -If a storage resource access is set to **Restricted**, the run from which it's accessed must have explicit access to it. Learn how restricted access works in [General resource access](/platform/collaboration/general-resource-access). +If a storage resource access is set to **Restricted**, the run from which it's accessed must have explicit access to it. Learn how restricted access works in [General resource access](/account/collaboration/general-resource-access). ::: diff --git a/sources/platform/storage/key_value_store.md b/sources/platform/storage/key_value_store.md index 137a9e0360..1be8fb1e97 100644 --- a/sources/platform/storage/key_value_store.md +++ b/sources/platform/storage/key_value_store.md @@ -17,7 +17,7 @@ Key-value stores are mutable - you can both add entries and delete them. :::info Retention period -Named key-value stores are retained indefinitely. Unnamed key-value stores expire after 7 days unless otherwise specified. [Learn more](/platform/storage#named-and-unnamed-storages) +Named key-value stores are retained indefinitely. Unnamed key-value stores expire after 7 days unless otherwise specified. [Learn more](/storage#named-and-unnamed-storages) ::: @@ -38,7 +38,7 @@ In [Apify Console](https://console.apify.com), you can view your key-value store ![Key-value stores in app](./images/key-value-stores-app.png) -To view a key-value store's content, click on its **Store ID**. Under the **Actions** menu, you can rename your store (which extends its [retention period](/platform/storage#named-and-unnamed-storages)) and grant [access rights](../collaboration/index.md) using the **Share** button. +To view a key-value store's content, click on its **Store ID**. Under the **Actions** menu, you can rename your store (which extends its [retention period](/storage#named-and-unnamed-storages)) and grant [access rights](/account/collaboration) using the **Share** button. Click on the **API** button to view and test a store's [API endpoints](/api/v2/storage-key-value-stores). ![Key-value stores detail](./images/key-value-stores-detail-header.png) @@ -276,11 +276,11 @@ _Using the [JavaScript SDK](/sdk/js/reference/class/KeyValueStore#setValue) or t ## Share -You can grant [access rights](../collaboration/index.md) to your key-value store through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](../collaboration/list_of_permissions.md). +You can grant [access rights](/account/collaboration) to your key-value store through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](/account/collaboration/list-of-permissions). -You can also share key-value stores by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/platform/collaboration/general-resource-access). +You can also share key-value stores by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/account/collaboration/general-resource-access). -For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/platform/collaboration/general-resource-access#pre-signed-urls). +For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/account/collaboration/general-resource-access#pre-signed-urls). ### Share key-value stores between runs @@ -338,7 +338,7 @@ other_store_client = apify_client.key_value_store('jane-doe/old-store') The same applies for the [Apify API](#apify-api) - you can use [the same endpoints](#apify-api) as you would normally do. -Check out the [Storage overview](/platform/storage#share-storages-between-runs) for details on sharing storages between runs. +Check out the [Storage overview](/storage#share-storages-between-runs) for details on sharing storages between runs. ## Data consistency diff --git a/sources/platform/storage/request_queue.md b/sources/platform/storage/request_queue.md index 0f3b774659..e39bed665d 100644 --- a/sources/platform/storage/request_queue.md +++ b/sources/platform/storage/request_queue.md @@ -15,7 +15,7 @@ The storage system for request queues accommodates both breadth-first and depth- :::info Retention period -Named request queues are retained indefinitely. Unnamed request queues expire after 7 days unless otherwise specified. [Learn more](/platform/storage#named-and-unnamed-storages) +Named request queues are retained indefinitely. Unnamed request queues expire after 7 days unless otherwise specified. [Learn more](/storage#named-and-unnamed-storages) ::: @@ -38,7 +38,7 @@ In the [Apify Console](https://console.apify.com), you can view your request que To view a request queue, click on its **Queue ID**. Under the **Actions** menu, you can rename your queue's name (and, in turn, its -[retention period](/platform/storage#named-and-unnamed-storages)) and [access rights](../collaboration/index.md) using the **Share** button. +[retention period](/storage#named-and-unnamed-storages)) and [access rights](/account/collaboration) using the **Share** button. Click on the **API** button to view and test a queue's [API endpoints](/api/v2/storage-request-queues). ![Request queues detail](./images/request-queue-detail.png) @@ -565,11 +565,11 @@ A detailed tutorial on how to process one request queue with multiple Actor runs ## Share -You can grant [access rights](../collaboration/index.md) to your request queue through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](../collaboration/list_of_permissions.md). +You can grant [access rights](/account/collaboration) to your request queue through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](/account/collaboration/list-of-permissions). -You can also share request queues by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/platform/collaboration/general-resource-access). +You can also share request queues by link using their ID or name, depending on your account or resource-level general access setting. Learn how link-based access works in [General resource access](/account/collaboration/general-resource-access). -For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/platform/collaboration/general-resource-access#pre-signed-urls). +For one-off sharing of specific records when access is restricted, you can generate time-limited pre-signed URLs. See [Sharing restricted resources with pre-signed URLs](/account/collaboration/general-resource-access#pre-signed-urls). ### Share request queues between runs @@ -627,7 +627,7 @@ other_queue_client = apify_client.request_queue('jane-doe/old-queue') The same applies for the [Apify API](#apify-api) - you can use [the same endpoints](#apify-api) as you would normally do. -Check out the [Storage overview](/platform/storage#share-storages-between-runs) for details on sharing storages between runs. +Check out the [Storage overview](/storage#share-storages-between-runs) for details on sharing storages between runs. ## Limits diff --git a/src/pages/api/index.tsx b/src/pages/api/index.tsx index b94108602b..046dd9f953 100644 --- a/src/pages/api/index.tsx +++ b/src/pages/api/index.tsx @@ -114,7 +114,7 @@ export default function Api() { heading="Apify API documentation" description={ <> - Learn how to use the Apify platform programmatically. + Learn how to use the Apify platform programmatically. } /> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 9e983bed57..8be82ce295 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -89,10 +89,10 @@ export default function Home() { />
- - - - + + + +
} title="Actors" description="Develop, run, and share web scraping and automation tools in the cloud." - to="/platform/actors" + to="/actors" /> } title="Storage" description="Store files and results of your web scraping jobs, and export it to various formats." - to="/platform/storage" + to="/storage" /> } title="Proxy" description="Avoid blocking by smartly rotating datacenter and residential IP addresses." - to="/platform/proxy" + to="/proxy" /> } title="Schedules" description="Automatically start Actors and saved tasks at specific times." - to="/platform/schedules" + to="/actors/running/schedules" /> } title="Integrations" description="Connect Actors with your favorite web apps and cloud services." - to="/platform/integrations" + to="/integrations" /> } title="Monitoring" description="Check the performance of your Actors, validate data quality, and receive alerts." - to="/platform/monitoring" + to="/actors/running/monitoring" /> } title="Collaboration" description="Share Actors with other people, manage your organizations and permissions." - to="/platform/collaboration" + to="/account/collaboration" /> } title="Security" description="Learn about Apify platform security and data protection." - to="/platform/security" + to="/security" /> } title="MCP" description="Discover and use Actors with AI agents and LLMs via Apify MCP server." - to="/platform/integrations/mcp" + to="/integrations/mcp" /> diff --git a/src/utils/agents-prompt.js b/src/utils/agents-prompt.js index 78876db600..a3ed43ddaf 100644 --- a/src/utils/agents-prompt.js +++ b/src/utils/agents-prompt.js @@ -148,7 +148,7 @@ await Actor.init(); // Structure of input is defined in input_schema.json const { startUrls = ['https://apify.com'], maxRequestsPerCrawl = 100 } = (await Actor.getInput()) ?? {}; -// Proxy configuration to rotate IP addresses and prevent blocking (https://docs.apify.com/platform/proxy) +// Proxy configuration to rotate IP addresses and prevent blocking (https://docs.apify.com/proxy) const proxyConfiguration = await Actor.createProxyConfiguration(); const crawler = new CheerioCrawler({