diff --git a/apify-docs-theme/src/config.js b/apify-docs-theme/src/config.js
index ccd4577658..f5882ac6c3 100644
--- a/apify-docs-theme/src/config.js
+++ b/apify-docs-theme/src/config.js
@@ -19,91 +19,99 @@ const themeConfig = {
target: '_self',
},
items: [
+ // Product zone
{
- label: 'Academy',
- href: `${absoluteUrl}/academy`,
- activeBasePath: 'academy',
+ label: 'Get Started',
+ href: `${absoluteUrl}/platform/get-started`,
+ activeBasePath: 'platform/get-started',
position: 'left',
target: '_self',
rel: 'dofollow',
},
{
- label: 'Platform',
- href: `${absoluteUrl}/platform`,
- className: 'navbar__active',
- activeBasePath: 'platform',
+ label: 'Actors',
+ href: `${absoluteUrl}/platform/actors`,
+ activeBasePath: 'platform/actors',
position: 'left',
target: '_self',
rel: 'dofollow',
},
{
- label: 'API',
- type: 'dropdown',
- to: `${absoluteUrl}/api`,
+ label: 'Integrations',
+ href: `${absoluteUrl}/platform/integrations`,
+ activeBasePath: 'platform/integrations',
+ position: 'left',
target: '_self',
rel: 'dofollow',
- activeBasePath: 'api',
+ },
+ {
+ label: 'Account',
+ href: `${absoluteUrl}/platform/account`,
+ activeBasePath: 'platform/account',
+ position: 'left',
+ target: '_self',
+ rel: 'dofollow',
+ },
+ {
+ label: 'Resources',
+ type: 'dropdown',
position: 'left',
items: [
{
- label: 'Reference',
+ label: 'API Reference',
href: `${absoluteUrl}/api/v2`,
target: '_self',
rel: 'dofollow',
},
{
- label: 'Client for JavaScript',
- href: `${absoluteUrl}/api/client/js/docs`,
+ label: 'SDK for JavaScript',
+ href: `${absoluteUrl}/sdk/js/docs/overview`,
target: '_self',
rel: 'dofollow',
},
{
- label: 'Client for Python',
- href: `${absoluteUrl}/api/client/python/docs/overview`,
+ label: 'SDK for Python',
+ href: `${absoluteUrl}/sdk/python/docs/overview`,
target: '_self',
rel: 'dofollow',
},
- ],
- },
- {
- label: 'SDK',
- type: 'dropdown',
- to: `${absoluteUrl}/sdk`,
- activeBasePath: 'sdk',
- position: 'left',
- target: '_self',
- rel: 'dofollow',
- items: [
{
- label: 'SDK for JavaScript',
- href: `${absoluteUrl}/sdk/js/docs/overview`,
+ label: 'Client for JavaScript',
+ href: `${absoluteUrl}/api/client/js/docs`,
target: '_self',
rel: 'dofollow',
},
{
- html: 'SDK for Python',
- href: `${absoluteUrl}/sdk/python/docs/overview`,
+ label: 'Client for Python',
+ href: `${absoluteUrl}/api/client/python/docs/overview`,
+ target: '_self',
+ rel: 'dofollow',
+ },
+ {
+ label: 'CLI',
+ href: `${absoluteUrl}/cli/docs`,
target: '_self',
rel: 'dofollow',
},
],
},
+ // Ecosystem zone
{
- label: 'CLI',
- href: `${absoluteUrl}/cli/docs`,
+ label: 'Academy',
+ href: `${absoluteUrl}/academy`,
+ activeBasePath: 'academy',
position: 'left',
- activeBasePath: 'cli',
target: '_self',
rel: 'dofollow',
+ className: 'navbar__zone-separator',
},
{
- label: 'Open source',
+ label: 'Open Source',
type: 'dropdown',
to: `${absoluteUrl}/open-source`,
activeBasePath: 'open-source',
target: '_self',
position: 'left',
- className: 'navbar__item',
items: [
{
label: 'Crawlee',
@@ -161,48 +169,43 @@ const themeConfig = {
footer: {
links: [
{
- title: 'Learn',
+ title: 'Product',
items: [
{
- label: 'Academy',
- href: `${absoluteUrl}/academy`,
- target: '_self',
- rel: 'dofollow',
- },
- {
- label: 'Platform',
- href: `${absoluteUrl}/platform`,
+ label: 'Get Started',
+ href: `${absoluteUrl}/platform/get-started`,
target: '_self',
rel: 'dofollow',
},
- ],
- },
- {
- title: 'API',
- items: [
{
- label: 'Reference',
- href: `${absoluteUrl}/api/v2`,
+ label: 'Actors',
+ href: `${absoluteUrl}/platform/actors`,
target: '_self',
rel: 'dofollow',
},
{
- label: 'Client for JavaScript',
- href: `${absoluteUrl}/api/client/js/docs`,
+ label: 'Integrations',
+ href: `${absoluteUrl}/platform/integrations`,
target: '_self',
rel: 'dofollow',
},
{
- label: 'Client for Python',
- href: `${absoluteUrl}/api/client/python/docs/overview`,
+ label: 'Account',
+ href: `${absoluteUrl}/platform/account`,
target: '_self',
rel: 'dofollow',
},
],
},
{
- title: 'SDK',
+ title: 'Developer tools',
items: [
+ {
+ label: 'API Reference',
+ href: `${absoluteUrl}/api/v2`,
+ target: '_self',
+ rel: 'dofollow',
+ },
{
label: 'SDK for JavaScript',
href: `${absoluteUrl}/sdk/js/docs/overview`,
@@ -215,33 +218,26 @@ const themeConfig = {
target: '_self',
rel: 'dofollow',
},
- ],
- },
- {
- title: 'Other',
- items: [
{
label: 'CLI',
href: `${absoluteUrl}/cli/docs`,
- position: 'left',
- target: '_self',
- rel: 'dofollow',
- },
- {
- label: 'Open source',
- href: `${absoluteUrl}/open-source`,
- position: 'left',
target: '_self',
rel: 'dofollow',
},
],
},
{
- title: 'More',
+ title: 'Learn & community',
items: [
+ {
+ label: 'Academy',
+ href: `${absoluteUrl}/academy`,
+ target: '_self',
+ rel: 'dofollow',
+ },
{
label: 'Crawlee',
- to: 'https://crawlee.dev',
+ href: 'https://crawlee.dev',
rel: 'dofollow',
},
{
@@ -252,6 +248,23 @@ const themeConfig = {
href: 'https://discord.com/invite/jyEM2PRvMU',
label: 'Discord',
},
+ ],
+ },
+ {
+ title: 'Company',
+ items: [
+ {
+ label: 'Security',
+ href: `${absoluteUrl}/platform/security`,
+ target: '_self',
+ rel: 'dofollow',
+ },
+ {
+ label: 'Limits',
+ href: `${absoluteUrl}/platform/limits`,
+ target: '_self',
+ rel: 'dofollow',
+ },
{
label: 'Trust Center',
href: 'https://trust.apify.com',
diff --git a/apify-docs-theme/src/theme/NavbarItem/NavbarNavLink.jsx b/apify-docs-theme/src/theme/NavbarItem/NavbarNavLink.jsx
index 1abffd5c64..92bb5fd918 100644
--- a/apify-docs-theme/src/theme/NavbarItem/NavbarNavLink.jsx
+++ b/apify-docs-theme/src/theme/NavbarItem/NavbarNavLink.jsx
@@ -61,15 +61,17 @@ export default function NavbarNavLink({
.some((item) => (item.to || item.href).endsWith(location.pathname));
if (href) {
+ const hrefClassName = activeBaseUrl
+ ? (location.pathname.startsWith(`/${activeBasePath}`) || dropDownHasActiveItem
+ ? 'navbar__item navbar__link navbar__link--active'
+ : 'navbar__item navbar__link')
+ : undefined;
+ const combinedClassName = [hrefClassName, props.className].filter(Boolean).join(' ') || undefined;
return (
);
diff --git a/apify-docs-theme/src/theme/custom.css b/apify-docs-theme/src/theme/custom.css
index a9e4b89515..d523db718f 100644
--- a/apify-docs-theme/src/theme/custom.css
+++ b/apify-docs-theme/src/theme/custom.css
@@ -554,6 +554,22 @@ aside .icon svg[class*=iconExternalLink] {
display: none;
}
+.navbar__zone-separator {
+ position: relative;
+ margin-left: 1.2rem !important;
+ padding-left: 1.6rem !important;
+}
+
+.navbar__zone-separator::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 25%;
+ height: 50%;
+ width: 1px;
+ background-color: var(--ifm-color-emphasis-400);
+}
+
.navbar__items {
gap: 0.4rem;
}
diff --git a/nginx.conf b/nginx.conf
index 54a7020500..193ca35de1 100644
--- a/nginx.conf
+++ b/nginx.conf
@@ -268,12 +268,12 @@ server {
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 ^/monitoring$ /platform/actors/running/monitoring permanent;
+ rewrite ^/proxy$ /platform/actors/proxy permanent;
rewrite ^/robotic-process-automation$ /platform/robotic-process-automation permanent;
- rewrite ^/scheduler$ /platform/schedules permanent;
- rewrite ^/schedules$ /platform/schedules permanent;
- rewrite ^/storage$ /platform/storage permanent;
+ rewrite ^/scheduler$ /platform/actors/running/schedules permanent;
+ rewrite ^/schedules$ /platform/actors/running/schedules permanent;
+ rewrite ^/storage$ /platform/actors/storage permanent;
rewrite ^/scraping$ /platform/tutorials permanent;
rewrite ^/tutorials$ /platform/tutorials permanent;
rewrite ^/web-scraping-101$ /platform/web-scraping-101 permanent;
@@ -298,24 +298,24 @@ server {
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/actor-or-task-run-failure permanent;
- rewrite ^/monitoring/check-data-quality$ /platform/monitoring/check-data-quality permanent;
- rewrite ^/monitoring/monitor-multiple-tasks$ /platform/monitoring/monitor-multiple-tasks permanent;
+ rewrite ^/monitoring/actor-or-task-run-failure$ /platform/actors/running/monitoring permanent;
+ rewrite ^/monitoring/check-data-quality$ /platform/actors/running/monitoring permanent;
+ rewrite ^/monitoring/monitor-multiple-tasks$ /platform/actors/running/monitoring permanent;
rewrite ^/monitoring/monitor-shared-datasets$ /platform/monitoring/monitor-shared-datasets permanent;
rewrite ^/robotic-process-automation/tips-and-tricks$ /platform/robotic-process-automation/tips-and-tricks permanent;
- rewrite ^/proxy/connection-settings$ /platform/proxy/connection-settings 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/troubleshooting permanent;
+ rewrite ^/proxy/connection-settings$ /platform/actors/proxy permanent;
+ rewrite ^/proxy/datacenter-proxy$ /platform/actors/proxy/datacenter-proxy permanent;
+ rewrite ^/proxy/google-serp-proxy$ /platform/actors/proxy/google-serp-proxy permanent;
+ rewrite ^/proxy/residential-proxy/nodejs-examples$ /platform/actors/proxy/residential-proxy permanent;
+ rewrite ^/proxy/residential-proxy/python-examples$ /platform/actors/proxy/residential-proxy permanent;
+ rewrite ^/proxy/residential-proxy/php-examples$ /platform/actors/proxy/residential-proxy permanent;
+ rewrite ^/proxy/residential-proxy$ /platform/actors/proxy/residential-proxy permanent;
+ rewrite ^/proxy/troubleshooting$ /platform/actors/proxy permanent;
rewrite ^/web-scraping-101/anti-scraping-techniques$ /platform/web-scraping-101/anti-scraping-techniques permanent;
rewrite ^/web-scraping-101/web-scraping-techniques$ /platform/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 ^/storage/dataset$ /platform/actors/storage/dataset permanent;
+ rewrite ^/storage/key-value-store$ /platform/actors/storage/key-value-store permanent;
+ rewrite ^/storage/request-queue$ /platform/actors/storage/request-queue permanent;
rewrite ^/access-rights/organization-account/how-to-use$ /platform/access-rights/organization-account/how-to-use permanent;
rewrite ^/access-rights/organization-account/setup$ /platform/access-rights/organization-account/setup permanent;
rewrite ^/tutorials/analyze-pages-and-fix-errors$ /platform/tutorials/analyze-pages-and-fix-errors permanent;
@@ -386,8 +386,8 @@ server {
rewrite ^/proxy/google-serp-proxy/python-examples$ /platform/proxy/google-serp-proxy/examples permanent;
rewrite ^/proxy/google-serp-proxy/php-examples$ /platform/proxy/google-serp-proxy/examples permanent;
rewrite ^/proxy/google-serp-proxy/examples$ /platform/proxy/google-serp-proxy/examples permanent;
- rewrite ^/proxy/residential-proxy/tips-and-tricks$ /platform/proxy/residential-proxy permanent;
- rewrite ^/platform/proxy/residential-proxy/tips-and-tricks$ /platform/proxy/residential-proxy permanent;
+ rewrite ^/proxy/residential-proxy/tips-and-tricks$ /platform/actors/proxy/residential-proxy permanent;
+ rewrite ^/platform/proxy/residential-proxy/tips-and-tricks$ /platform/actors/proxy/residential-proxy permanent;
rewrite ^/scraping/cheerio-scraper$ /platform/tutorials/apify-scrapers/cheerio-scraper permanent;
rewrite ^/tutorials/apify-scrapers/cheerio-scraper$ /platform/tutorials/apify-scrapers/cheerio-scraper permanent;
rewrite ^/scraping/getting-started$ /platform/tutorials/apify-scrapers/getting-started permanent;
@@ -520,19 +520,25 @@ server {
rewrite ^/platform/tutorials/quick-start$ /platform/actors/running redirect;
rewrite ^/platform/tutorials$ /platform/actors/running redirect;
- # Reorganization of docs: Access rights
- rewrite ^/platform/access-rights$ /platform/collaboration/access-rights redirect;
- rewrite ^/platform/access-rights/organization-account$ /platform/collaboration/organization-account redirect;
- rewrite ^/platform/access-rights/organization-account/setup$ /platform/collaboration/organization-account/setup redirect;
- rewrite ^/platform/access-rights/organization-account/how-to-use$ /platform/collaboration/organization-account/how-to-use redirect;
- rewrite ^/platform/access-rights/list-of-permissions$ /platform/collaboration/list-of-permissions redirect;
+ # Reorganization of docs: Access rights (now under /account)
+ rewrite ^/platform/access-rights$ /platform/account/collaboration/access-rights redirect;
+ rewrite ^/platform/access-rights/organization-account$ /platform/account/collaboration/organization-account redirect;
+ rewrite ^/platform/access-rights/organization-account/setup$ /platform/account/collaboration/organization-account/setup redirect;
+ rewrite ^/platform/access-rights/organization-account/how-to-use$ /platform/account/collaboration/organization-account/how-to-use redirect;
+ rewrite ^/platform/access-rights/list-of-permissions$ /platform/account/collaboration/access-rights redirect;
- # Reorganization of development section
+ # Reorganization of docs: Collaboration section (moved from /account to /account/collaboration)
+ rewrite ^/platform/account/access-rights$ /platform/account/collaboration/access-rights redirect;
+ rewrite ^/platform/account/general-resource-access(.*)$ /platform/account/collaboration/general-resource-access$1 redirect;
+ rewrite ^/platform/account/organization-account(.*)$ /platform/account/collaboration/organization-account$1 redirect;
+ rewrite ^/platform/account/list-of-permissions$ /platform/account/collaboration/access-rights redirect;
+
+ # Reorganization of development section (schema paths updated for input-output-schemas)
rewrite ^/platform/actors/development/actor-config$ /platform/actors/development/actor-definition/actor-json redirect;
rewrite ^/platform/actors/development/base-docker-images$ /platform/actors/development/actor-definition/dockerfile redirect;
- rewrite ^/platform/actors/development/secret-input$ /platform/actors/development/actor-definition/input-schema/secret-input redirect;
- rewrite ^/platform/actors/development/input-schema$ /platform/actors/development/actor-definition/input-schema/specification/v1 redirect;
- rewrite ^/platform/actors/development/output-schema$ /platform/actors/development/actor-definition/output-schema redirect;
+ rewrite ^/platform/actors/development/secret-input$ /platform/actors/development/input-output-schemas/secret-input redirect;
+ rewrite ^/platform/actors/development/input-schema$ /platform/actors/development/input-output-schemas/specification/v1 redirect;
+ rewrite ^/platform/actors/development/output-schema$ /platform/actors/development/input-output-schemas/output-schema redirect;
rewrite ^/platform/actors/development/container-web-server$ /platform/actors/development/programming-interface/container-web-server redirect;
rewrite ^/platform/actors/development/environment-variables$ /platform/actors/development/programming-interface/environment-variables redirect;
rewrite ^/platform/actors/development/builds$ /platform/actors/development/builds-and-runs/builds redirect;
@@ -541,6 +547,19 @@ server {
rewrite ^/platform/actors/development/testing-and-maintenance$ /platform/actors/development/deployment/automated-tests redirect;
rewrite ^/platform/actors/development/source-code$ /platform/actors/development/deployment/source-types redirect;
+ # IA v2 platform restructure
+ rewrite ^/platform/schedules$ /platform/actors/running/schedules redirect;
+ rewrite ^/platform/monitoring$ /platform/actors/running/monitoring redirect;
+ rewrite ^/platform/storage(.*)$ /platform/actors/storage$1 redirect;
+ rewrite ^/platform/proxy(.*)$ /platform/actors/proxy$1 redirect;
+ rewrite ^/platform/console(.*)$ /platform/account$1 redirect;
+ rewrite ^/platform/collaboration(.*)$ /platform/account$1 redirect;
+ rewrite ^/platform/actors/development/quick-start(.*)$ /platform/get-started/build-an-actor$1 redirect;
+ rewrite ^/platform/actors/development/actor-definition/input-schema(.*)$ /platform/actors/development/input-output-schemas/input-schema$1 redirect;
+ rewrite ^/platform/actors/development/actor-definition/output-schema(.*)$ /platform/actors/development/input-output-schemas/output-schema$1 redirect;
+ rewrite ^/platform/actors/development/actor-definition/dataset-schema(.*)$ /platform/actors/development/input-output-schemas/dataset-schema$1 redirect;
+ rewrite ^/platform/actors/development/actor-definition/key-value-store-schema$ /platform/actors/development/input-output-schemas/key-value-store-schema redirect;
+
# Academy restructuring
rewrite ^/academy/advanced-web-scraping/scraping-paginated-sites$ /academy/advanced-web-scraping/crawling/crawling-with-search permanent;
rewrite ^/academy/php$ /academy/php/use-apify-from-php redirect; # not permanent in case we want to reuse /php in the future
diff --git a/sources/academy/ai/ai-agents.mdx b/sources/academy/ai/ai-agents.mdx
index 8ccea0a205..403928ba7c 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](/platform/actors/storage/dataset)
:::note Agent memory
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 44896742dd..b9a5a742d0 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
@@ -59,7 +59,7 @@ You can Actorize various projects ranging from open-source libraries, throughout
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).
+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/actors/storage/key-value-store), or if it processes records that can be stored in Apify’s [request queue](/platform/actors/storage/request-queue). If the output consists of one or many similar JSON objects, it can utilize [dataset](/platform/actors/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.
@@ -83,7 +83,7 @@ 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 [Quick Start](/platform/get-started/build-an-actor).
:::
@@ -100,7 +100,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](/platform/actors/development/input-output-schemas/input-schema), [dataset schema](/platform/actors/development/input-output-schemas/dataset-schema), and general [storage](/platform/actors/storage).
#### Design guidelines
@@ -113,7 +113,7 @@ 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](/platform/actors/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.
diff --git a/sources/academy/platform/deploying_your_code/input_schema.md b/sources/academy/platform/deploying_your_code/input_schema.md
index 82eeab6b30..ea64c6d82a 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
---
-Though writing an [input schema](/platform/actors/development/actor-definition/input-schema) for an Actor is not a required step, it's definitely an ideal one. The Apify platform will read the `INPUT_SCHEMA.json` file within the root of your project and generate a user interface for entering input into your Actor, which makes it significantly easier for non-developers (and even developers) to configure and understand the inputs your Actor can receive. Because of this, we'll be writing an input schema for our example Actor.
+Though writing an [input schema](/platform/actors/development/input-output-schemas/input-schema) for an Actor is not a required step, it's definitely an ideal one. The Apify platform will read the `INPUT_SCHEMA.json` file within the root of your project and generate a user interface for entering input into your Actor, which makes it significantly easier for non-developers (and even developers) to configure and understand the inputs your Actor can receive. Because of this, we'll be writing an input schema for our example Actor.
:::note JSON requirement
@@ -55,7 +55,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](/platform/actors/development/input-output-schemas/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
{
@@ -106,8 +106,8 @@ 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](/platform/actors/development/input-output-schemas/input-schema) when writing a schema.
## Next up {#next}
-In the [next lesson](/platform/actors/development/actor-definition/dataset-schema), we'll learn how to generate an appealing Overview table to display our Actor's results in real time, so users can get immediate feedback about the data being extracted.
+In the [next lesson](/platform/actors/development/input-output-schemas/dataset-schema), we'll learn how to generate an appealing Overview table to display our Actor's results in real time, so users can get immediate feedback about the data being extracted.
diff --git a/sources/academy/platform/deploying_your_code/inputs_outputs.md b/sources/academy/platform/deploying_your_code/inputs_outputs.md
index db05c0338f..a26c8c021a 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](/platform/actors/storage/key-value-store), or to the [dataset](/platform/actors/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..1ed6165b18 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](/platform/actors/development/input-output-schemas/dataset-schema) for more detailed information about how to implement this feature.
:::
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..375376d266 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](/platform/actors/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/tasks_and_storage.md b/sources/academy/platform/expert_scraping_with_apify/tasks_and_storage.md
index ea5640c14d..949ab48808 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
@@ -23,8 +23,8 @@ 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 [crucial differences between named and unnamed storages](/platform/storage/usage#named-and-unnamed-storages).
+- Read about the [two main storage options](/platform/actors/storage/dataset) on the Apify platform.
+- Understand the [crucial differences between named and unnamed storages](/platform/actors/storage/usage#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 a1c6505b43..87b8e0e517 100644
--- a/sources/academy/platform/getting_started/creating_actors.md
+++ b/sources/academy/platform/getting_started/creating_actors.md
@@ -56,7 +56,7 @@ You will end up on a template detail page where you can see all the important in
### Using the template in the 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](/platform/get-started/build-an-actor/web-ide) where you can see the code of the template and start editing it.
:::tip Web IDE
@@ -143,7 +143,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](/platform/actors/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
diff --git a/sources/academy/platform/getting_started/inputs_outputs.md b/sources/academy/platform/getting_started/inputs_outputs.md
index 1b942658df..621202fdd9 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](/platform/actors/development/input-output-schemas/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/usage#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](/platform/actors/storage/usage#data-retention).
## Next up {#next}
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 ad154cd126..98631048ad 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
@@ -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](/platform/actors/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](/platform/actors/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}
@@ -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](/platform/actors/storage/dataset) and [key-value store](/platform/actors/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](/platform/actors/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](/platform/actors/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 d890390429..af3dc613a4 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](/platform/actors/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](/platform/actors/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', [
@@ -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](/platform/actors/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/usage) for more details on using specific proxies.
+[See the proxy docs](/platform/actors/proxy/usage) for more details on using specific proxies.
## Feedback
diff --git a/sources/academy/tutorials/apify_scrapers/getting_started.md b/sources/academy/tutorials/apify_scrapers/getting_started.md
index 9b05130eba..7f6aefed2d 100644
--- a/sources/academy/tutorials/apify_scrapers/getting_started.md
+++ b/sources/academy/tutorials/apify_scrapers/getting_started.md
@@ -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](/platform/actors/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/node_js/analyzing_pages_and_fixing_errors.md b/sources/academy/tutorials/node_js/analyzing_pages_and_fixing_errors.md
index d2314a7bd7..8683d150b3 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/usage#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](/platform/actors/storage/usage#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 ac643b365b..b26bb79bd3 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

-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](/platform/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/acts/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..a286971b0e 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](/platform/actors/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](/platform/actors/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/python/process_data_using_python.md b/sources/academy/tutorials/python/process_data_using_python.md
index d6030597c2..d2067ace1e 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](/platform/actors/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](/platform/actors/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..84bf479136 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](/platform/actors/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](/platform/actors/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 618b605fb8..7c2a257fda 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](/platform/actors/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..3826c2b7a8 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](/platform/actors/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/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 223f937cff..7f0f35e384 100644
--- a/sources/platform/console/billing.md
+++ b/sources/platform/account/billing.md
@@ -3,7 +3,7 @@ title: Billing
description: The Billings page is the central place for all information regarding your invoices, billing information regarding current usage, historical usage, subscriptions & limits.
sidebar_position: 3
category: platform
-slug: /console/billing
+slug: /account/billing
---
**The Billings page is the central place for all information regarding your invoices, billing information regarding usage in the current billing cycle, historical usage, subscriptions & limits.**
diff --git a/sources/platform/collaboration/list_of_permissions.md b/sources/platform/account/collaboration/access_rights.md
similarity index 63%
rename from sources/platform/collaboration/list_of_permissions.md
rename to sources/platform/account/collaboration/access_rights.md
index 9b7d3b227e..d1707c21a9 100644
--- a/sources/platform/collaboration/list_of_permissions.md
+++ b/sources/platform/account/collaboration/access_rights.md
@@ -1,21 +1,33 @@
---
-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
+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: 2
+category: platform
+slug: /account/collaboration/access-rights
---
-**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.**
+**Manage permissions for your private resources such as Actors, Actor runs, and storages. Allow other users to read, run, modify, or build new versions.**
---
-This document contains all the access options that can be granted to resources on the Apify platform.
+You can easily and securely share your own resources - Actors, tasks, key-value stores, datasets, and request queues - with other users by using a [granular](https://www.google.com/search?q=define+granular+permissions) permissions system. This enables you, for example, to let your colleague run an [Actor](../../actors/index.mdx) or view a [dataset](../../actors/storage/dataset.md) but not modify it.
-## Actors
+You can also grant permission to update an Actor and build a new version.
+[Storages](../../actors/storage/index.md) (key-value stores, request queues, and datasets) are sharable in the same way as a **read** permission or a combination of both **read** and **write** permissions.
-To learn about Apify Actors, check out the [documentation](../actors/index.mdx).
+To share an Actor, task, key-value store, request queue, or dataset, click on the **Actions** button in the top-right corner and select **Share**. You can add a collaborator by using their **user ID**, **email**, or **username**. Once you have added the collaborator, you can configure their permissions.
-### Actor
+
+
+## Permissions reference
+
+This section lists all 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).
+
+#### Actor
| Permission | Description |
|----------------------|------------------------------------------------------------|
@@ -25,7 +37,7 @@ To learn about Apify Actors, check out the [documentation](../actors/index.mdx).
| View runs | View a list of Actor runs and their details. |
| Manage access rights | Manage Actor access rights. |
-### Actor task
+#### Actor task
| Permission | Description |
|----------------------|------------------------------------------------------------|
@@ -34,13 +46,13 @@ 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.md).
-## Storage
+### Storage
-For more information about Storage, see its [documentation](../storage/index.md).
+For more information about storage, see its [documentation](../../actors/storage/index.md).
-### Dataset
+#### Dataset
| Permission | Description |
|----------------------|-----------------------------------------------------------------|
@@ -48,9 +60,9 @@ 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](../../actors/storage/dataset.md).
-### Key-value-store
+#### Key-value store
| Permission | Description |
|----------------------|---------------------------------------------------------------------------------------------------|
@@ -58,9 +70,9 @@ 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](../../actors/storage/key_value_store.md).
-### Request queue
+#### Request queue
| Permission | Description |
|----------------------|------------------------------------------------------------------------------------------------|
@@ -68,19 +80,19 @@ 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](../../actors/storage/request_queue.md).
-## Proxy
+### Proxy
| Permission | Description |
|------------|---------------------------|
| 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](../../actors/proxy/index.md).
-## User permissions
+### 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](./organization/index.md).
| Permission | Description |
|---------------------|-----------------------------------------------------------------------|
diff --git a/sources/platform/collaboration/general-resource-access.md b/sources/platform/account/collaboration/general-resource-access.md
similarity index 96%
rename from sources/platform/collaboration/general-resource-access.md
rename to sources/platform/account/collaboration/general-resource-access.md
index 5e3d695b74..d27e4572a2 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 (Anyone with ID can read or Restricted), and learn about link sharing, exceptions, 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.
@@ -26,7 +26,7 @@ This setting affects the following resources:
Access to resources that require explicit access — such as Actors, tasks or schedules are not affected by this setting.
-
+
## How Restricted Access works
@@ -103,13 +103,13 @@ The access is granted through explicit, behind-the-scenes permissions (not anony
This means you don’t need to manually adjust permissions or share multiple links when reporting an Actor issue — **just including the run URL in your issue is enough**
-
+
## Per-resource access control
The account level access control can be changed on individual resources. This can be done by setting the general access level to other than Restricted in the share dialog for a given resource. This way the resource level setting takes precedence over the account setting.
-
+
:::tip Using Apify API
You can also set the general access on a resource programmatically using the Apify API or Apify client. Read more in the API reference and client documentation.
@@ -182,7 +182,7 @@ The link will include a signature _only if the general resource access is set to
1. Click the **Export** button.
2. In the modal that appears, click **Copy shareable link**.
-
+
##### Key-value store records
@@ -190,7 +190,7 @@ The link will include a signature _only if the general resource access is set to
2. Navigate to the record you want to share.
3. In the **Actions** column, click the link icon to copy signed link.
-
+
#### How to generate pre-signed URLs using Apify Client
@@ -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](/platform/account/collaboration/general-resource-access#pre-signed-urls).
:::note Using Console URLs
diff --git a/sources/platform/account/collaboration/index.mdx b/sources/platform/account/collaboration/index.mdx
new file mode 100644
index 0000000000..b446135583
--- /dev/null
+++ b/sources/platform/account/collaboration/index.mdx
@@ -0,0 +1,30 @@
+---
+title: Overview
+description: Share Apify resources with teammates, manage access permissions, and set up organization accounts for your team.
+sidebar_label: Collaboration
+sidebar_position: 6
+slug: /account/collaboration
+---
+
+import Card from "@site/src/components/Card";
+import CardGrid from "@site/src/components/CardGrid";
+
+Apify lets you share resources with other users and manage access at both the account and resource level. Use organization accounts to centralize billing and manage team permissions.
+
+
• Insights - see analytics for your Actors.
• Messaging - check on issues reported in your Actors or send emails to users of your Actors. |
-| [Proxy](/platform/proxy)| View your proxy usage & credentials |
-| [Storage](/platform/storage)| View stored results of your runs in various data formats. |
-| [Billing](/platform/console/billing)| Billing information, statistics and invoices. |
-| [Settings](/platform/console/settings)| Settings of your account. |
+| [Proxy](/platform/actors/proxy)| View your proxy usage & credentials |
+| [Storage](/platform/actors/storage)| View stored results of your runs in various data formats. |
+| [Billing](/platform/account/billing)| Billing information, statistics and invoices. |
+| [Settings](/platform/account/settings)| Settings of your account. |
diff --git a/sources/platform/collaboration/images/access-rights/access-rights.png b/sources/platform/account/images/access-rights/access-rights.png
similarity index 100%
rename from sources/platform/collaboration/images/access-rights/access-rights.png
rename to sources/platform/account/images/access-rights/access-rights.png
diff --git a/sources/platform/console/images/apify-console-homepage.png b/sources/platform/account/images/apify-console-homepage.png
similarity index 100%
rename from sources/platform/console/images/apify-console-homepage.png
rename to sources/platform/account/images/apify-console-homepage.png
diff --git a/sources/platform/console/images/console-account-two-factor-disabled.png b/sources/platform/account/images/console-account-two-factor-disabled.png
similarity index 100%
rename from sources/platform/console/images/console-account-two-factor-disabled.png
rename to sources/platform/account/images/console-account-two-factor-disabled.png
diff --git a/sources/platform/console/images/console-account-two-factor-enabled.png b/sources/platform/account/images/console-account-two-factor-enabled.png
similarity index 100%
rename from sources/platform/console/images/console-account-two-factor-enabled.png
rename to sources/platform/account/images/console-account-two-factor-enabled.png
diff --git a/sources/platform/console/images/console-actors-recently-used.png b/sources/platform/account/images/console-actors-recently-used.png
similarity index 100%
rename from sources/platform/console/images/console-actors-recently-used.png
rename to sources/platform/account/images/console-actors-recently-used.png
diff --git a/sources/platform/console/images/console-actors-runs.png b/sources/platform/account/images/console-actors-runs.png
similarity index 100%
rename from sources/platform/console/images/console-actors-runs.png
rename to sources/platform/account/images/console-actors-runs.png
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/console-email-verification-page.png b/sources/platform/account/images/console-email-verification-page.png
similarity index 100%
rename from sources/platform/console/images/console-email-verification-page.png
rename to sources/platform/account/images/console-email-verification-page.png
diff --git a/sources/platform/console/images/console-forgotten-password-page.png b/sources/platform/account/images/console-forgotten-password-page.png
similarity index 100%
rename from sources/platform/console/images/console-forgotten-password-page.png
rename to sources/platform/account/images/console-forgotten-password-page.png
diff --git a/sources/platform/console/images/console-login.png b/sources/platform/account/images/console-login.png
similarity index 100%
rename from sources/platform/console/images/console-login.png
rename to sources/platform/account/images/console-login.png
diff --git a/sources/platform/console/images/console-reset-password-page.png b/sources/platform/account/images/console-reset-password-page.png
similarity index 100%
rename from sources/platform/console/images/console-reset-password-page.png
rename to sources/platform/account/images/console-reset-password-page.png
diff --git a/sources/platform/console/images/console-setup-two-factor-auth-key.png b/sources/platform/account/images/console-setup-two-factor-auth-key.png
similarity index 100%
rename from sources/platform/console/images/console-setup-two-factor-auth-key.png
rename to sources/platform/account/images/console-setup-two-factor-auth-key.png
diff --git a/sources/platform/console/images/console-sign-in-form.png b/sources/platform/account/images/console-sign-in-form.png
similarity index 100%
rename from sources/platform/console/images/console-sign-in-form.png
rename to sources/platform/account/images/console-sign-in-form.png
diff --git a/sources/platform/console/images/console-sign-in-methods-section.png b/sources/platform/account/images/console-sign-in-methods-section.png
similarity index 100%
rename from sources/platform/console/images/console-sign-in-methods-section.png
rename to sources/platform/account/images/console-sign-in-methods-section.png
diff --git a/sources/platform/console/images/console-sign-up-form.png b/sources/platform/account/images/console-sign-up-form.png
similarity index 100%
rename from sources/platform/console/images/console-sign-up-form.png
rename to sources/platform/account/images/console-sign-up-form.png
diff --git a/sources/platform/console/images/console-signup.png b/sources/platform/account/images/console-signup.png
similarity index 100%
rename from sources/platform/console/images/console-signup.png
rename to sources/platform/account/images/console-signup.png
diff --git a/sources/platform/console/images/console-store.png b/sources/platform/account/images/console-store.png
similarity index 100%
rename from sources/platform/console/images/console-store.png
rename to sources/platform/account/images/console-store.png
diff --git a/sources/platform/console/images/console-two-factor-app-setup.png b/sources/platform/account/images/console-two-factor-app-setup.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-app-setup.png
rename to sources/platform/account/images/console-two-factor-app-setup.png
diff --git a/sources/platform/console/images/console-two-factor-auth-disable.png b/sources/platform/account/images/console-two-factor-auth-disable.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-auth-disable.png
rename to sources/platform/account/images/console-two-factor-auth-disable.png
diff --git a/sources/platform/console/images/console-two-factor-authentication.png b/sources/platform/account/images/console-two-factor-authentication.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-authentication.png
rename to sources/platform/account/images/console-two-factor-authentication.png
diff --git a/sources/platform/console/images/console-two-factor-recovery-settings-request.png b/sources/platform/account/images/console-two-factor-recovery-settings-request.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-recovery-settings-request.png
rename to sources/platform/account/images/console-two-factor-recovery-settings-request.png
diff --git a/sources/platform/console/images/console-two-factor-recovery-settings-revealed.png b/sources/platform/account/images/console-two-factor-recovery-settings-revealed.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-recovery-settings-revealed.png
rename to sources/platform/account/images/console-two-factor-recovery-settings-revealed.png
diff --git a/sources/platform/console/images/console-two-factor-recovery-setup.png b/sources/platform/account/images/console-two-factor-recovery-setup.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-recovery-setup.png
rename to sources/platform/account/images/console-two-factor-recovery-setup.png
diff --git a/sources/platform/console/images/console-two-factor-use-recovery-code.png b/sources/platform/account/images/console-two-factor-use-recovery-code.png
similarity index 100%
rename from sources/platform/console/images/console-two-factor-use-recovery-code.png
rename to sources/platform/account/images/console-two-factor-use-recovery-code.png
diff --git a/sources/platform/collaboration/images/general-resouce-access/account-setting.png b/sources/platform/account/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/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/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/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/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/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/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/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/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/images/general-resouce-access/share-resource-dialog.png
diff --git a/sources/platform/collaboration/images/organizations/configure-permissions.png b/sources/platform/account/images/organizations/configure-permissions.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/configure-permissions.png
rename to sources/platform/account/images/organizations/configure-permissions.png
diff --git a/sources/platform/collaboration/images/organizations/convert-to-organization.png b/sources/platform/account/images/organizations/convert-to-organization.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/convert-to-organization.png
rename to sources/platform/account/images/organizations/convert-to-organization.png
diff --git a/sources/platform/collaboration/images/organizations/create-new-org.png b/sources/platform/account/images/organizations/create-new-org.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/create-new-org.png
rename to sources/platform/account/images/organizations/create-new-org.png
diff --git a/sources/platform/collaboration/images/organizations/integrations.png b/sources/platform/account/images/organizations/integrations.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/integrations.png
rename to sources/platform/account/images/organizations/integrations.png
diff --git a/sources/platform/collaboration/images/organizations/members.png b/sources/platform/account/images/organizations/members.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/members.png
rename to sources/platform/account/images/organizations/members.png
diff --git a/sources/platform/collaboration/images/organizations/my-organizations.png b/sources/platform/account/images/organizations/my-organizations.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/my-organizations.png
rename to sources/platform/account/images/organizations/my-organizations.png
diff --git a/sources/platform/collaboration/images/organizations/roles.png b/sources/platform/account/images/organizations/roles.png
similarity index 100%
rename from sources/platform/collaboration/images/organizations/roles.png
rename to sources/platform/account/images/organizations/roles.png
diff --git a/sources/platform/collaboration/images/organizations/switch-to-organization.png b/sources/platform/account/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/images/organizations/switch-to-organization.png
diff --git a/sources/platform/account/index.mdx b/sources/platform/account/index.mdx
new file mode 100644
index 0000000000..832a1ae418
--- /dev/null
+++ b/sources/platform/account/index.mdx
@@ -0,0 +1,35 @@
+---
+title: Account
+description: Manage your Apify account, billing, organization settings, 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, and team collaboration.
+
+
+
## Other
@@ -108,7 +108,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](../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:
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 9accc07dae..784b2e082a 100644
--- a/sources/platform/actors/running/runs_and_builds.md
+++ b/sources/platform/actors/running/runs_and_builds.md
@@ -1,7 +1,7 @@
---
title: Runs and builds
description: Learn about Actor builds and runs, their lifecycle, sharing, and data retention policy.
-sidebar_position: 2
+sidebar_position: 3
slug: /actors/running/runs-and-builds
---
@@ -27,11 +27,11 @@ Each build may have different features, input, or output. By fixing the build to
When you start an Actor, an Actor run is created. An Actor run is a Docker container created from the build's Docker image with dedicated resources (CPU, memory, disk space). For more on this topic, see [Usage and resources](./usage_and_resources.md).
-Each run has its own (default) [storages](../../storage) assigned, which it may but not necessarily need to use:
+Each run has its own (default) [storages](../storage) assigned, which it may but not necessarily need to use:
-- [Key-value store](../../storage/key-value-store) containing the input and enabling Actor to store other files.
-- [Dataset](../../storage/dataset) enabling Actor to store the results.
-- [Request queue](../../storage/request-queue) to maintain a queue of URLs to be processed.
+- [Key-value store](../storage/key-value-store) containing the input and enabling Actor to store other files.
+- [Dataset](../storage/dataset) enabling Actor to store the results.
+- [Request queue](../storage/request-queue) to maintain a queue of URLs to be processed.
What's happening inside of an Actor is visible on the Actor run log in the Actor run detail:
@@ -129,4 +129,4 @@ Apify securely stores your ten most recent runs indefinitely, ensuring your reco
## Sharing
-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/access_rights.md) system.
diff --git a/sources/platform/schedules.md b/sources/platform/actors/running/schedules.md
similarity index 90%
rename from sources/platform/schedules.md
rename to sources/platform/actors/running/schedules.md
index ef13cc0048..959feec47e 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
---
**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.**
@@ -34,7 +34,7 @@ Each schedule can be associated with a maximum of _10_ Actors and _10_ Actor tas
## Setting 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](../index.mdx) or [task](./tasks.md) 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,20 +50,20 @@ Click on the name (by default it is **My Schedule**), there you can change its n
You can adjust how often your Actor or task runs using the [schedule setup tool](#schedule-setup). You can find it by clicking on the **Schedule setup** card.
-
+
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](./input_and_output.md) and running options like [build](../development/builds_and_runs/builds.md), timeout, [memory](./usage_and_resources.md).
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.
-
+
If you're scheduling a task, just select the task you prepared earlier using the drop-down. If you need to override the task's input, you can pass it as a JSON object in the **Input JSON overrides** field.
-
+
To add more Actors or tasks, just repeat the process.
@@ -75,7 +75,7 @@ For integrations, you can also add a [webhook](/platform/integrations/webhooks)
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 [Integrations](https://console.apify.com/account?tab=integrations) tab of your Apify account settings.
+You can find your [secret API token](../../integrations/index.mdx) under the [Integrations](https://console.apify.com/account?tab=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)).
@@ -116,7 +116,7 @@ For more information, refer to the [schedules](/api/v2/schedule-get) section in
The schedule setup tool uses [cron expressions](https://en.wikipedia.org/wiki/Cron#CRON_expression) to specify run times. If you're familiar with how to use them and need a specific run schedule, you can dive right in. If not, don't worry - the setup tool has a visual custom schedule builder that provides a similar level of control as cron expressions, though it's not quite as powerful.
-
+
The **Next runs** section shows when the next run will be, if you click on **Show more** button it will expand and show you the next five runs. You can use this live feedback to experiment until you find the correct configuration.
@@ -128,7 +128,7 @@ The schedule setup tool allows you to control the schedule's notifications. All
If you want to manage the notifications for your schedules in bulk, you can do this from the [Notifications](https://console.apify.com/settings/notifications) settings tab. As long as you have 15 schedules or less, you can manage their notifications all at once by clicking the **Manage notifications for specific schedules** button.
-
+
## Cron expressions
diff --git a/sources/platform/actors/running/store.md b/sources/platform/actors/running/store.md
index 819179bd1f..53c9da5b93 100644
--- a/sources/platform/actors/running/store.md
+++ b/sources/platform/actors/running/store.md
@@ -199,7 +199,7 @@ Please, in such a case, do not hesitate to contact the Actor author or our suppo
### 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](/platform/actors/storage), and usage of [residential proxies](/platform/actors/proxy/residential-proxy) or [SERPs](/platform/actors/proxy/google-serp-proxy).

diff --git a/sources/platform/actors/running/tasks.md b/sources/platform/actors/running/tasks.md
index 033fd175b1..916e88dd26 100644
--- a/sources/platform/actors/running/tasks.md
+++ b/sources/platform/actors/running/tasks.md
@@ -1,7 +1,7 @@
---
title: Actor tasks
description: Create and save reusable configurations of Apify Actors tailored to specific use cases.
-sidebar_position: 7.2
+sidebar_position: 6
slug: /actors/running/tasks
sidebar_label: Tasks
---
@@ -10,7 +10,7 @@ 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](./schedules.md), or [API](/api/v2/actor-task-runs-post).
You can find all your tasks in the [Apify Console](https://console.apify.com/actors/tasks).
@@ -46,11 +46,11 @@ Or using the **Start** button positioned following the input configuration.
You can also run tasks using:
-- [Schedules](../../schedules.md).
+- [Schedules](./schedules.md).
- 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/access_rights.md) system.
diff --git a/sources/platform/actors/running/usage_and_resources.md b/sources/platform/actors/running/usage_and_resources.md
index 310819f7c4..e0a67fa0fe 100644
--- a/sources/platform/actors/running/usage_and_resources.md
+++ b/sources/platform/actors/running/usage_and_resources.md
@@ -1,7 +1,7 @@
---
title: Usage and resources
description: Learn about your Actors' memory and processing power requirements, their relationship with Docker resources, minimum requirements for different use cases and its impact on the cost.
-sidebar_position: 2
+sidebar_position: 4
slug: /actors/running/usage-and-resources
---
diff --git a/sources/platform/storage/dataset.md b/sources/platform/actors/storage/dataset.md
similarity index 86%
rename from sources/platform/storage/dataset.md
rename to sources/platform/actors/storage/dataset.md
index b56d6008d9..6f908a2cf6 100644
--- a/sources/platform/storage/dataset.md
+++ b/sources/platform/actors/storage/dataset.md
@@ -1,9 +1,9 @@
---
title: Dataset
description: Store and export web scraping, crawling or data processing job results. Learn how to access and manage datasets in Apify Console or via API.
-sidebar_position: 9.2
+sidebar_position: 2
toc_max_heading_level: 4
-slug: /storage/dataset
+slug: /actors/storage/dataset
---
**Store and export web scraping, crawling or data processing job results. Learn how to access and manage datasets in Apify Console or via API.**
@@ -18,7 +18,7 @@ Dataset storage enables you to sequentially save and retrieve data. A unique dat
Typically, datasets comprise results from web scraping, crawling, and data processing jobs. You can visualize this data in a table, where each object is forming a row and its attributes are represented as columns. You have the option to export data in various formats, including JSON, CSV, XML, Excel, HTML Table, RSS or JSONL.
> Named datasets are retained indefinitely.
-> Unnamed datasets expire after 7 days unless otherwise specified. [Learn more](/platform/storage/usage#named-and-unnamed-storages)
+> Unnamed datasets expire after 7 days unless otherwise specified. [Learn more](/platform/actors/storage/usage#named-and-unnamed-storages)
Dataset storage is _append-only_ - data can only be added and cannot be modified or deleted once stored.
@@ -43,7 +43,7 @@ To view or download a dataset:
2. Select the format & configure other options if desired in **Export dataset** section.
3. Click **Download**.
-Utilize the **Actions** menu to modify the dataset's name, which also affects its [retention period](/platform/storage/usage#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](/platform/actors/storage/usage#data-retention), and to adjust [access rights](../../account/collaboration/access_rights.md). The **API** button allows you to explore and test the dataset's [API endpoints](/api/v2/storage-datasets).

@@ -53,7 +53,7 @@ The [Apify API](/api/v2/storage-datasets) enables you programmatic access to you
If you are accessing your datasets using the `username~store-name` [store ID format](./index.md), you will need to use your secret API token. You can find the token (and your user ID) on the [Integrations](https://console.apify.com/account#/integrations)tab of **Settings** page of your Apify account.
-> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/programming/api.md#authentication)).
+> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../../integrations/programming/api.md#authentication)).
To retrieve a list of your datasets, send a GET request to the [Get list of datasets](/api/v2/datasets-get) endpoint.
@@ -151,7 +151,7 @@ Check out the [Python API client documentation](/api/client/python/reference/cla
#### JavaScript SDK
-When working with a JavaScript [Actor](../actors/index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/result-storage#dataset) is an essential tool, especially for dataset management. It simplifies the tasks of storing and retrieving data, seamlessly integrating with the Actor's workflow. Key features of the SDK include the ability to append data, retrieve what is stored, and manage dataset properties effectively. Central to this functionality is the [`Dataset`](/sdk/js/reference/class/Dataset) class. This class allows you to determine where your data is stored - locally or in the Apify cloud. To add data to your chosen datasets, use the [`pushData()`](/sdk/js/reference/class/Dataset#pushData) method.
+When working with a JavaScript [Actor](../index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/result-storage#dataset) is an essential tool, especially for dataset management. It simplifies the tasks of storing and retrieving data, seamlessly integrating with the Actor's workflow. Key features of the SDK include the ability to append data, retrieve what is stored, and manage dataset properties effectively. Central to this functionality is the [`Dataset`](/sdk/js/reference/class/Dataset) class. This class allows you to determine where your data is stored - locally or in the Apify cloud. To add data to your chosen datasets, use the [`pushData()`](/sdk/js/reference/class/Dataset#pushData) method.
Additionally the SDK offers other methods like [`getData()`](/sdk/js/reference/class/Dataset#getData), [`map()`](/sdk/js/reference/class/Dataset#map), and [`reduce()`](/sdk/js/reference/class/Dataset#reduce). For practical applications of these methods, refer to the [example](/sdk/js/docs/examples/map-and-reduce) section.
@@ -225,7 +225,7 @@ Check out the [JavaScript SDK documentation](/sdk/js/docs/guides/result-storage#
#### Python SDK
-For Python [Actors](../actors/index.mdx), the [Python SDK](/sdk/python/docs/concepts/storages#working-with-datasets) is essential. The dataset is represented by a [`Dataset`](/sdk/python/reference/class/Dataset) class. You can use this class to specify whether your data is stored locally or in the Apify cloud and push data to the datasets of your choice using the [`push_data()`](/sdk/python/reference/class/Dataset#push_data) method. For further data manipulation you could also use other methods such as [`get_data()`](/sdk/python/reference/class/Dataset#get_data), [`map()`](/sdk/python/reference/class/Dataset#map) and [`reduce()`](/sdk/python/reference/class/Dataset#reduce).
+For Python [Actors](../index.mdx), the [Python SDK](/sdk/python/docs/concepts/storages#working-with-datasets) is essential. The dataset is represented by a [`Dataset`](/sdk/python/reference/class/Dataset) class. You can use this class to specify whether your data is stored locally or in the Apify cloud and push data to the datasets of your choice using the [`push_data()`](/sdk/python/reference/class/Dataset#push_data) method. For further data manipulation you could also use other methods such as [`get_data()`](/sdk/python/reference/class/Dataset#get_data), [`map()`](/sdk/python/reference/class/Dataset#map) and [`reduce()`](/sdk/python/reference/class/Dataset#reduce).
For datasets stored locally, the data is located at the following path:
@@ -380,15 +380,15 @@ By default, the whole result is wrapped in an `
-> Unnamed key-value stores expire after 7 days unless otherwise specified.
> [Learn more](/platform/storage/usage#named-and-unnamed-storages)
+> Unnamed key-value stores expire after 7 days unless otherwise specified.
> [Learn more](/platform/actors/storage/usage#named-and-unnamed-storages)
## Basic usage
@@ -37,7 +37,7 @@ In [Apify Console](https://console.apify.com), you can view your key-value store

-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/usage#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](/platform/actors/storage/usage#named-and-unnamed-storages)) and grant [access rights](../../account/collaboration/access_rights.md) using the **Share** button.
Click on the **API** button to view and test a store's [API endpoints](/api/v2/storage-key-value-stores).

@@ -60,7 +60,7 @@ If you are accessing your datasets using the `username~store-name` [store ID for
:::tip Authentication
-When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. For more information, refer to the [API integration](../integrations/programming/api.md#authentication) documentation.
+When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. For more information, refer to the [API integration](../../integrations/programming/api.md#authentication) documentation.
:::
@@ -141,11 +141,11 @@ Check out the [Python API client documentation](/api/client/python/reference/cla
#### JavaScript SDK
-When working with a JavaScript [Actor](../actors/index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/result-storage#key-value-store) is an essential tool, especially for key-value store management. The primary class for this purpose is the [`KeyValueStore`](/sdk/js/reference/class/KeyValueStore). This class allows you to decide whether your data will be stored locally or in the Apify cloud. For data manipulation, it offers the [`getValue()`](/sdk/js/reference/class/KeyValueStore#getValue) and [`setValue()`](/sdk/js/reference/class/KeyValueStore#setValue) methods to retrieve and assign values, respectively.
+When working with a JavaScript [Actor](../index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/result-storage#key-value-store) is an essential tool, especially for key-value store management. The primary class for this purpose is the [`KeyValueStore`](/sdk/js/reference/class/KeyValueStore). This class allows you to decide whether your data will be stored locally or in the Apify cloud. For data manipulation, it offers the [`getValue()`](/sdk/js/reference/class/KeyValueStore#getValue) and [`setValue()`](/sdk/js/reference/class/KeyValueStore#setValue) methods to retrieve and assign values, respectively.
Additionally, you can iterate over the keys in your store using the [`forEachKey()`](/sdk/js/reference/class/KeyValueStore#forEachKey) method.
-Every Actor run is linked to a default key-value store that is automatically created for that specific run. If you're running your Actors and opt to store data locally, you can easily supply the [input](../actors/running/input_and_output.md) by placing an _INPUT.json_ file in the corresponding directory of the default key-value store. This method ensures that your Actor has all the necessary data readily available for its execution.
+Every Actor run is linked to a default key-value store that is automatically created for that specific run. If you're running your Actors and opt to store data locally, you can easily supply the [input](../running/input_and_output.md) by placing an _INPUT.json_ file in the corresponding directory of the default key-value store. This method ensures that your Actor has all the necessary data readily available for its execution.
You can find _INPUT.json_ and other key-value store files in the location below.
@@ -201,15 +201,15 @@ await Actor.setValue('OUTPUT', imageBuffer, { contentType: 'image/jpeg' });
await Actor.exit();
```
-The `Actor.getInput()` method is not only a shortcut to `Actor.getValue('INPUT')`; it is also compatible with [`Actor.metamorph()`](../actors/development/programming_interface/metamorph.md). This is because a metamorphed Actor run's input is stored in the _INPUT-METAMORPH-1_ key instead of _INPUT_, which hosts the original input.
+The `Actor.getInput()` method is not only a shortcut to `Actor.getValue('INPUT')`; it is also compatible with [`Actor.metamorph()`](../development/programming_interface/metamorph.md). This is because a metamorphed Actor run's input is stored in the _INPUT-METAMORPH-1_ key instead of _INPUT_, which hosts the original input.
Check out the [JavaScript SDK documentation](/sdk/js/docs/guides/result-storage#key-value-store) and the `KeyValueStore` class's [API reference](/sdk/js/reference/class/KeyValueStore) for details on managing your key-value stores with the JavaScript SDK.
#### Python SDK
-For Python [Actor](../actors/index.mdx), the [Python SDK](/sdk/python/docs/concepts/storages#working-with-key-value-stores) is essential. The key-value store is represented by a [`KeyValueStore`](/sdk/python/reference/class/KeyValueStore) class. You can use this class to specify whether your data is stored locally or in the Apify cloud. For further data manipulation it offers [`get_value()`](/sdk/python/reference/class/KeyValueStore#get_value) and [`set_value()`](/sdk/python/reference/class/KeyValueStore#set_value) methods to retrieve and assign values, respectively.
+For Python [Actor](../index.mdx), the [Python SDK](/sdk/python/docs/concepts/storages#working-with-key-value-stores) is essential. The key-value store is represented by a [`KeyValueStore`](/sdk/python/reference/class/KeyValueStore) class. You can use this class to specify whether your data is stored locally or in the Apify cloud. For further data manipulation it offers [`get_value()`](/sdk/python/reference/class/KeyValueStore#get_value) and [`set_value()`](/sdk/python/reference/class/KeyValueStore#set_value) methods to retrieve and assign values, respectively.
-Every Actor run is linked to a default key-value store that is automatically created for that specific run. If you're running your Actors and opt to store data locally, you can easily supply the [input](../actors/running/input_and_output.md) by placing an _INPUT.json_ file in the corresponding directory of the default key-value store. This method ensures that your Actor has all the necessary data readily available for its execution.
+Every Actor run is linked to a default key-value store that is automatically created for that specific run. If you're running your Actors and opt to store data locally, you can easily supply the [input](../running/input_and_output.md) by placing an _INPUT.json_ file in the corresponding directory of the default key-value store. This method ensures that your Actor has all the necessary data readily available for its execution.
You can find _INPUT.json_ and other key-value store files in the location below.
@@ -253,7 +253,7 @@ async def main():
await Actor.set_value(key='OUTPUT', value=image_buffer, content_type='image/jpeg')
```
-The `Actor.get_input()` method is not only a shortcut to `Actor.get_value('INPUT')`; it is also compatible with [`Actor.metamorph()`](../actors/development/programming_interface/metamorph.md). This is because a metamorphed Actor run's input is stored in the _INPUT-METAMORPH-1_ key instead of _INPUT_, which hosts the original input.
+The `Actor.get_input()` method is not only a shortcut to `Actor.get_value('INPUT')`; it is also compatible with [`Actor.metamorph()`](../development/programming_interface/metamorph.md). This is because a metamorphed Actor run's input is stored in the _INPUT-METAMORPH-1_ key instead of _INPUT_, which hosts the original input.
Check out the [Python SDK documentation](/sdk/python/docs/concepts/storages#working-with-key-value-stores) and the `KeyValueStore` class's [API reference](/sdk/python/reference/class/KeyValueStore) for details on managing your key-value stores with the Python SDK.
@@ -267,15 +267,15 @@ _Using the [JavaScript SDK](/sdk/js/reference/class/KeyValueStore#setValue) or o
## Sharing
-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/access_rights.md) to your key-value store through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](../../account/collaboration/access_rights.md#permissions-reference).
-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](/platform/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](/platform/account/collaboration/general-resource-access#pre-signed-urls).
### Sharing key-value stores between runs
-You can access a key-value store from any [Actor](../actors/index.mdx) or [task](../actors/running/tasks.md) run as long as you know its _name_ or _ID_.
+You can access a key-value store from any [Actor](../index.mdx) or [task](../running/tasks.md) run as long as you know its _name_ or _ID_.
To access a key-value store from another run using the [Apify SDK](/sdk), open it using the same method as you would do with any other store.
@@ -329,7 +329,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/usage#sharing-storages-between-runs) for details on sharing storages between runs.
+Check out the [Storage overview](/platform/actors/storage/usage#sharing-storages-between-runs) for details on sharing storages between runs.
## Data consistency
diff --git a/sources/platform/storage/request_queue.md b/sources/platform/actors/storage/request_queue.md
similarity index 90%
rename from sources/platform/storage/request_queue.md
rename to sources/platform/actors/storage/request_queue.md
index 32c0fa87b4..bbb844b10f 100644
--- a/sources/platform/storage/request_queue.md
+++ b/sources/platform/actors/storage/request_queue.md
@@ -2,8 +2,8 @@
title: Request queue
description: Queue URLs for an Actor to visit in its run. Learn how to share your queues between Actor runs. Access and manage request queues from Apify Console or via API.
toc_max_heading_level: 4
-sidebar_position: 9.4
-slug: /storage/request-queue
+sidebar_position: 4
+slug: /actors/storage/request-queue
---
**Queue URLs for an Actor to visit in its run. Learn how to share your queues between Actor runs. Access and manage request queues from Apify Console or via API.**
@@ -18,7 +18,7 @@ Request queues enable you to enqueue and retrieve requests such as URLs with an
The storage system for request queues accommodates both breadth-first and depth-first crawling strategies, along with the inclusion of custom data attributes. This system enables you to check if certain URLs have already been encountered, add new URLs to the queue, and retrieve the next set of URLs for processing.
> Named request queues are retained indefinitely.
-> Unnamed request queues expire after 7 days unless otherwise specified.
> [Learn more](/platform/storage/usage#named-and-unnamed-storages)
+> Unnamed request queues expire after 7 days unless otherwise specified.
> [Learn more](/platform/actors/storage/usage#named-and-unnamed-storages)
## Basic usage
@@ -37,7 +37,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/usage#named-and-unnamed-storages)) and [access rights](../collaboration/index.md) using the **Share** button.
+[retention period](/platform/actors/storage/usage#named-and-unnamed-storages)) and [access rights](../../account/collaboration/access_rights.md) using the **Share** button.
Click on the **API** button to view and test a queue's [API endpoints](/api/v2/storage-request-queues).

@@ -48,7 +48,7 @@ The [Apify API](/api/v2/storage-request-queues) allows you programmatic access t
If you are accessing your datasets using the `username~store-name` [store ID format](./index.md), you will need to use your secret API token. You can find the token (and your user ID) on the [Integrations](https://console.apify.com/account#/integrations) page of your Apify account.
-> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../integrations/programming/api.md#authentication)).
+> When providing your API authentication token, we recommend using the request's `Authorization` header, rather than the URL. ([More info](../../integrations/programming/api.md#authentication)).
To get a list of your request queues, send a GET request to the [Get list of request queues](/api/v2/request-queues-get) endpoint.
@@ -141,9 +141,9 @@ Check out the [Python API client documentation](/api/client/python/reference/cla
#### JavaScript SDK
-When working with a JavaScript [Actor](../actors/index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/request-storage#request-queue) is an essential tool, especially for request queue management. The primary class for this purpose is the [`RequestQueue`](/sdk/js/reference/class/RequestQueue) class. Use this class to decide whether your data is stored locally or in the Apify cloud.
+When working with a JavaScript [Actor](../index.mdx), the [JavaScript SDK](/sdk/js/docs/guides/request-storage#request-queue) is an essential tool, especially for request queue management. The primary class for this purpose is the [`RequestQueue`](/sdk/js/reference/class/RequestQueue) class. Use this class to decide whether your data is stored locally or in the Apify cloud.
-If you are building a JavaScript [Actor](../actors/index.mdx), you will be using the [JavaScript SDK](/sdk/js/docs/guides/request-storage#request-queue). The request queue is represented by a [`RequestQueue`](/sdk/js/reference/class/RequestQueue) class. You can use the class to specify whether your data is stored locally or in the Apify cloud and [enqueue new URLs](/sdk/js/reference/class/RequestQueue#addRequests).
+If you are building a JavaScript [Actor](../index.mdx), you will be using the [JavaScript SDK](/sdk/js/docs/guides/request-storage#request-queue). The request queue is represented by a [`RequestQueue`](/sdk/js/reference/class/RequestQueue) class. You can use the class to specify whether your data is stored locally or in the Apify cloud and [enqueue new URLs](/sdk/js/reference/class/RequestQueue#addRequests).
Every Actor run is automatically linked with a default request queue, initiated upon adding the first request. This queue is primarily utilized for storing URLs to be crawled during the particular Actor run, though its use is not mandatory. For enhanced flexibility, you can establish named queues. These named queues offer the advantage of being shareable across different Actors or various Actor runs, facilitating a more interconnected and efficient process.
@@ -214,7 +214,7 @@ Check out the [JavaScript SDK documentation](/sdk/js/docs/guides/request-storage
#### Python SDK
-For Python [Actor](../actors/index.mdx) development, the [Python SDK](/sdk/python/docs/concepts/storages#working-with-request-queues) the in essential. The request queue is represented by [`RequestQueue`](/sdk/python/reference/class/RequestQueue) class. Utilize this class to determine whether your data is stored locally or in the Apify cloud. For managing your data, it provides the capability to [enqueue new URLs](/sdk/python/reference/class/RequestQueue#add_requests), facilitating seamless integration and operation within your Actor.
+For Python [Actor](../index.mdx) development, the [Python SDK](/sdk/python/docs/concepts/storages#working-with-request-queues) the in essential. The request queue is represented by [`RequestQueue`](/sdk/python/reference/class/RequestQueue) class. Utilize this class to determine whether your data is stored locally or in the Apify cloud. For managing your data, it provides the capability to [enqueue new URLs](/sdk/python/reference/class/RequestQueue#add_requests), facilitating seamless integration and operation within your Actor.
Every Actor run is automatically connected to a default request queue, established specifically for that run upon the addition of the first request. If you're operating your Actors and choose to utilize this queue, it typically serves to store URLs for crawling in the respective Actor run, though its use is not mandatory. To extend functionality, you have the option to create named queue, which offer the flexibility to be shared among different Actors or across multiple Actor runs.
@@ -556,15 +556,15 @@ A detailed tutorial on how to process one request queue with multiple Actor runs
## Sharing
-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/access_rights.md) to your request queue through the **Share** button under the **Actions** menu. For more details check the [full list of permissions](../../account/collaboration/access_rights.md#permissions-reference).
-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](/platform/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](/platform/account/collaboration/general-resource-access#pre-signed-urls).
### Sharing request queues between runs
-You can access a request queue from any [Actor](../actors/index.mdx) or [task](../actors/running/tasks.md) run as long as you know its _name_ or _ID_.
+You can access a request queue from any [Actor](../index.mdx) or [task](../running/tasks.md) run as long as you know its _name_ or _ID_.
To access a request queue from another run using the [Apify SDK](/sdk), open it using the same method like you would do with any other request queue.
@@ -618,7 +618,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/usage#sharing-storages-between-runs) for details on sharing storages between runs.
+Check out the [Storage overview](/platform/actors/storage/usage#sharing-storages-between-runs) for details on sharing storages between runs.
## Limits
diff --git a/sources/platform/storage/usage.md b/sources/platform/actors/storage/usage.md
similarity index 92%
rename from sources/platform/storage/usage.md
rename to sources/platform/actors/storage/usage.md
index ac55550620..6dc5b57a37 100644
--- a/sources/platform/storage/usage.md
+++ b/sources/platform/actors/storage/usage.md
@@ -1,9 +1,9 @@
---
title: Storage usage
description: Learn how to effectively use Apify's storage options. Understand key aspects of data retention, rate limiting, and secure sharing.
-sidebar_position: 9.1
+sidebar_position: 1
category: platform
-slug: /storage/usage
+slug: /actors/storage/usage
---
import StoragePricingCalculator from "@site/src/components/StoragePricingCalculator";
@@ -16,20 +16,20 @@ import StoragePricingCalculator from "@site/src/components/StoragePricingCalcula
[Dataset](./dataset.md) storage allows you to store a series of data objects, such as results from web scraping, crawling, or data processing jobs. You can export your datasets in JSON, CSV, XML, RSS, Excel, or HTML formats.
-
+
## Key-value store
The [key-value store](./key_value_store.md) is ideal for saving data records such as files, screenshots of web pages, and PDFs or for persisting your Actor's state. The records are accessible under a unique name and can be written and read quickly.
-
+
## Request queue
[Request queues](./request_queue.md) allow you to dynamically maintain a queue of URLs of web pages. You can use this when recursively crawling websites: you start from initial URLs and add new links as they are found while skipping duplicates.
-
+
## Basic usage
@@ -160,11 +160,11 @@ For example, storage names `janedoe~my-storage-1` and `janedoe~web-scrape-result
## Sharing
-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/access_rights.md) to other Apify users to view or modify your storages. Check the [full list of permissions](../../account/collaboration/access_rights.md#permissions-reference).
-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](/platform/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](/platform/account/collaboration/general-resource-access#pre-signed-urls).
:::tip Accessing restricted storage resources via API
@@ -174,7 +174,7 @@ If your storage resource is set to _restricted_, all API calls must include a va
### Sharing storages between runs
-Storage can be accessed from any [Actor](../actors/index.mdx) or [task](../actors/running/tasks.md) run, provided you have its _name_ or _ID_. You can access and manage storages from other runs using the same methods or endpoints as with storages from your current run.
+Storage can be accessed from any [Actor](../index.mdx) or [task](../running/tasks.md) run, provided you have its _name_ or _ID_. You can access and manage storages from other runs using the same methods or endpoints as with storages from your current run.
[Datasets](./dataset.md) and [key-value stores](./key_value_store.md) support concurrent use by multiple Actors. Thus, several Actors or tasks can simultaneously write data to a single dataset or key-value store. Similarly, multiple runs can read data from datasets and key-value stores at the same time.
@@ -186,7 +186,7 @@ Storage can be accessed from any [Actor](../actors/index.mdx) or [task](../actor
:::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).
+Learn how restricted access works in [General resource access](/platform/account/collaboration/general-resource-access).
:::
diff --git a/sources/platform/collaboration/access_rights.md b/sources/platform/collaboration/access_rights.md
deleted file mode 100644
index 219c9b43cd..0000000000
--- a/sources/platform/collaboration/access_rights.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-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
----
-
-**Manage permissions for your private resources such as Actors, Actor runs, and storages. Allow other users to read, run, modify, or build new versions.**
-
----
-
-You can easily and securely share your own resources - Actors, tasks, key-value stores, datasets, and request queues - with other users by using a [granular](https://www.google.com/search?q=define+granular+permissions) permissions system. This enables you, for example, to 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) (key-value stores, request queues, and datasets) are sharable in the same way as a **read** permission or a combination of both **read** and **write** permissions.
-
-To share an Actor, task, key-value store, request queue, or dataset, click on the **Actions** button in the top-right corner and select **Share**. You can add a collaborator by using their **user ID**, **email**, or **username**. Once you have added the collaborator, you can configure their permissions.
-
-
diff --git a/sources/platform/collaboration/index.md b/sources/platform/collaboration/index.md
deleted file mode 100644
index 18aad02362..0000000000
--- a/sources/platform/collaboration/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-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
----
-
-**Learn how to collaborate with other users and manage permissions for organizations or private resources such as Actors, Actor runs, and storages.**
-
----
-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.
-
-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)
-- _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
-
-You can control access to your resources in four ways:
-
-
| Access 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 link | -Certain 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 account | -Apify's organization account allows multiple engineers to collaborate on team projects with role-specific access permissions. | -
| Publishing in Apify Store | -Another 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. | -