From d200058d6153e6340e59fd89621d342de22bb98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:34:03 +0200 Subject: [PATCH 1/7] docs: bring back vale rules rework Capitalization rules turn it back on --- .github/styles/Apify/Capitalization.yml | 12 +++++++----- .vale.ini | 1 - 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/styles/Apify/Capitalization.yml b/.github/styles/Apify/Capitalization.yml index 367cb9a9e0..0f1d6cb52d 100644 --- a/.github/styles/Apify/Capitalization.yml +++ b/.github/styles/Apify/Capitalization.yml @@ -1,7 +1,9 @@ -extends: existence -message: "The word '%s' should always be capitalized." +extends: substitution +message: "Use '%s' instead of '%s'." ignorecase: false level: error -tokens: - - '\bactor\b' - - '\bactors\b' +scope: text & ~alt +nonword: true +swap: + '\bactor\b': Actor + '\bactors\b': Actors diff --git a/.vale.ini b/.vale.ini index 8d6bbb1d0e..b7f2c13bef 100644 --- a/.vale.ini +++ b/.vale.ini @@ -31,7 +31,6 @@ Microsoft.URLFormat = NO Microsoft.GeneralURL = NO Microsoft.RangeFormat = NO Apify.Apify = NO -Apify.Capitalization = NO Apify.Languages = NO [{README.md,CONTRIBUTING.md}] From cbbc894a64979d54b10c59993dddeff3ba369b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:02:35 +0200 Subject: [PATCH 2/7] reintroduce other Apify-specific rules turn back Apify-specific rules fix all errors within sources/platform --- .github/styles/Apify/Apify.yml | 24 +++++++++++++++---- .github/styles/Apify/Capitalization.yml | 2 +- .../config/vocabularies/Docs/accept.txt | 8 +++---- .vale.ini | 2 -- .../development/deployment/source_types.md | 2 +- .../environment_variables.md | 7 +++++- .../programming_interface/metamorph.md | 2 +- .../development/quick_start/start_locally.md | 4 +++- sources/platform/actors/running/tasks.md | 2 +- sources/platform/integrations/ai/mcp.md | 3 ++- .../workflows-and-notifications/bubble.md | 2 +- .../gumloop/maps.md | 2 +- .../gumloop/tiktok.md | 2 +- sources/platform/proxy/google_serp_proxy.md | 2 +- sources/platform/security.md | 2 +- 15 files changed, 43 insertions(+), 23 deletions(-) diff --git a/.github/styles/Apify/Apify.yml b/.github/styles/Apify/Apify.yml index ff61ff6ca2..c6dae86a44 100644 --- a/.github/styles/Apify/Apify.yml +++ b/.github/styles/Apify/Apify.yml @@ -1,10 +1,24 @@ extends: substitution message: "Use '%s' instead of '%s'." -ignorecase: false +ignorecase: true level: warning +scope: text swap: - Apify Dashboard: Apify Console - apify freelancers: Apify freelancers - Apify Platform: Apify platform - '(?:[Tt]he\s)?[Aa]pify\sproxy': Apify Proxy + # Product name changes + 'apify dashboard': Apify Console + 'apify console': Apify Console + 'Apify console': Apify Console + 'apify store': Apify Store + 'Apify store': Apify Store + + # Capitalization fixes + 'apify freelancers': Apify freelancers + 'apify platform': Apify platform + + # Proxy variations (simplified) + 'apify proxy': Apify Proxy + 'the apify proxy': Apify Proxy + + # Common abbreviations circa: approx. + 'ca\.': circa diff --git a/.github/styles/Apify/Capitalization.yml b/.github/styles/Apify/Capitalization.yml index 0f1d6cb52d..f128166a09 100644 --- a/.github/styles/Apify/Capitalization.yml +++ b/.github/styles/Apify/Capitalization.yml @@ -2,8 +2,8 @@ extends: substitution message: "Use '%s' instead of '%s'." ignorecase: false level: error -scope: text & ~alt nonword: true +scope: text,~alt,~code swap: '\bactor\b': Actor '\bactors\b': Actors diff --git a/.github/styles/config/vocabularies/Docs/accept.txt b/.github/styles/config/vocabularies/Docs/accept.txt index 59514bdd83..f6466a386c 100644 --- a/.github/styles/config/vocabularies/Docs/accept.txt +++ b/.github/styles/config/vocabularies/Docs/accept.txt @@ -16,6 +16,7 @@ node_modules SDK Dockerfile Docker's +CAPTCHAs Docusaurus navbar @@ -53,7 +54,6 @@ proxied LLM embedder chatbot -[Ll]angchain [Kk]eboola [Aa]irbyte @@ -68,7 +68,7 @@ exploitability [Ww]hitepaper [Cc]ron scalably -metamorph +[Mm]etamorph hostname IPs unscoped @@ -90,8 +90,8 @@ preconfigured devs asyncio backlinks? -captchas? -Chatbot + + combinator deduplicating dev diff --git a/.vale.ini b/.vale.ini index b7f2c13bef..890c2d00ce 100644 --- a/.vale.ini +++ b/.vale.ini @@ -30,8 +30,6 @@ Microsoft.Auto = NO Microsoft.URLFormat = NO Microsoft.GeneralURL = NO Microsoft.RangeFormat = NO -Apify.Apify = NO -Apify.Languages = NO [{README.md,CONTRIBUTING.md}] Apify.H1 = NO diff --git a/sources/platform/actors/development/deployment/source_types.md b/sources/platform/actors/development/deployment/source_types.md index f747fcc628..07c716a052 100644 --- a/sources/platform/actors/development/deployment/source_types.md +++ b/sources/platform/actors/development/deployment/source_types.md @@ -23,7 +23,7 @@ This section explains the various sources types available for Apify Actors and h This is the default option when your Actor's source code is hosted on the Apify platform. It offers quick previews and updates to your source code, easy file and directory browsing, and direct testing of the [`INPUT_SCHEMA.json`](/platform/actors/development/actor-definition/input-schema) on the Apify platform. -A `Dockerfile` is mandatory for all Actors. When using the default NodeJS Dockerfile, you'll typically need `main.js` for your source code and `package.json` for [NPM](https://www.npmjs.com/) package configurations. +A `Dockerfile` is mandatory for all Actors. When using the default NodeJS Dockerfile, you'll typically need `main.js` for your source code and `package.json` for [npm](https://www.npmjs.com/) package configurations. For more information on creating custom Dockerfiles or using Apify's base images, refer to the [Dockerfile](/platform/actors/development/actor-definition/dockerfile#custom-dockerfile) and [base Docker images](/platform/actors/development/actor-definition/dockerfile#base-docker-images) documentation. diff --git a/sources/platform/actors/development/programming_interface/environment_variables.md b/sources/platform/actors/development/programming_interface/environment_variables.md index b64da0dc06..25529b0848 100644 --- a/sources/platform/actors/development/programming_interface/environment_variables.md +++ b/sources/platform/actors/development/programming_interface/environment_variables.md @@ -17,8 +17,13 @@ import TabItem from '@theme/TabItem'; You can set up environment variables for your Actor in two ways: +- [How to use environment variables in an Actor](#how-to-use-environment-variables-in-an-actor) +- [System environment variables](#system-environment-variables) - [Set up environment variables in `actor.json`](#set-up-environment-variables-in-actorjson) - [Set up environment variables in Apify Console](#set-up-environment-variables-in-apify-console) +- [Access environment variables](#access-environment-variables) +- [Use the `Configuration` class](#use-the-configuration-class) +- [Build-time environment variables](#build-time-environment-variables) :::info Environment variable precedence @@ -65,7 +70,7 @@ Here's a table of key system environment variables: | `ACTOR_WEB_SERVER_PORT` | TCP port for the Actor to start an HTTP server on. This server can be used to receive external messages or expose monitoring and control interfaces. The server also receives messages from the [Actor Standby](/platform/actors/development/programming-interface/standby) mode. | | `ACTOR_WEB_SERVER_URL` | Unique public URL for accessing the Actor run web server from the outside world. | | `APIFY_API_PUBLIC_BASE_URL` | Public URL of the Apify API. May be used to interact with the platform programmatically. Typically set to `api.apify.com`. | -| `APIFY_DEDICATED_CPUS` | Number of CPU cores reserved for the actor, based on allocated memory. | +| `APIFY_DEDICATED_CPUS` | Number of CPU cores reserved for the Actor, based on allocated memory. | | `APIFY_WORKFLOW_KEY` | Identifier used for grouping related runs and API calls together. | | `APIFY_META_ORIGIN` | Specifies how an Actor run was started. Possible values are in [Runs and builds](/platform/actors/running/runs-and-builds#origin) documentation. | | `APIFY_INPUT_SECRETS_KEY_FILE` | Path to the secret key used to decrypt [Secret inputs](/platform/actors/development/actor-definition/input-schema/secret-input). | diff --git a/sources/platform/actors/development/programming_interface/metamorph.md b/sources/platform/actors/development/programming_interface/metamorph.md index 245287cfbc..0878aa45d3 100644 --- a/sources/platform/actors/development/programming_interface/metamorph.md +++ b/sources/platform/actors/development/programming_interface/metamorph.md @@ -18,7 +18,7 @@ Metamorph is a powerful operation that transforms an Actor run into the run of a ## Understand metamorph -The metamorph process involves several key steps. It stops the current Actor's Docker container, then starts a new container using a different Docker image. During this transition, all default storages are preserved. The new input is stored under the _INPUT-METAMORPH-1_ key in the default key-value store, ensuring seamless data transfer between Actor runs. +The metamorph process involves several key steps. It stops the current Actor's Docker container, then starts a new container using a different Docker image. During this transition, all default storages are preserved. The new input is stored under the `INPUT-METAMORPH-1` key in the default key-value store, ensuring seamless data transfer between Actor runs. ## Benefits of metamorph diff --git a/sources/platform/actors/development/quick_start/start_locally.md b/sources/platform/actors/development/quick_start/start_locally.md index 9839e9c55b..0580c2c78c 100644 --- a/sources/platform/actors/development/quick_start/start_locally.md +++ b/sources/platform/actors/development/quick_start/start_locally.md @@ -84,10 +84,12 @@ In the next step, we’ll explore the results in more detail. ### Step 3: Explore the Actor Let's explore the Actor structure. - + #### The `.actor` folder + The `.actor` folder contains the Actor configuration. The `actor.json` file defines the Actor's name, description, and other settings. Find more info in the [actor.json](https://docs.apify.com/platform/actors/development/actor-definition/actor-json) definition. + #### Actor's `input` diff --git a/sources/platform/actors/running/tasks.md b/sources/platform/actors/running/tasks.md index 132ebb7b67..033fd175b1 100644 --- a/sources/platform/actors/running/tasks.md +++ b/sources/platform/actors/running/tasks.md @@ -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.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). diff --git a/sources/platform/integrations/ai/mcp.md b/sources/platform/integrations/ai/mcp.md index 422f58e5d6..2fb5ca258f 100644 --- a/sources/platform/integrations/ai/mcp.md +++ b/sources/platform/integrations/ai/mcp.md @@ -167,7 +167,7 @@ Here are some special MCP operations and how the Apify MCP Server supports them: ### Overview of available tools Here is an overview list of all the tools provided by the Apify MCP Server. - + | Tool name | Category | Enabled by default | Description | | :--- | :--- | :--- | :---: | | `search-actors` | actors | ✅ | Search for Actors in the Apify Store. | @@ -188,6 +188,7 @@ Here is an overview list of all the tools provided by the Apify MCP Server. | `get-dataset-list` | storage | | List all available datasets for the user. | | `get-key-value-store-list`| storage | | List all available key-value stores for the user. | | `add-actor` | experimental | | Add an Actor as a new tool for the user to call. | + ### Tools configuration diff --git a/sources/platform/integrations/workflows-and-notifications/bubble.md b/sources/platform/integrations/workflows-and-notifications/bubble.md index 608141485b..33292e9049 100644 --- a/sources/platform/integrations/workflows-and-notifications/bubble.md +++ b/sources/platform/integrations/workflows-and-notifications/bubble.md @@ -205,7 +205,7 @@ Use this URL as the Apify webhook target. Configure the webhook's authentication 1. Notify Bubble when the run finishes - Create an Apify **Webhook** with event `ACTOR.RUN.SUCCEEDED`. - Set `actorId` from the Step 1 result. - - Set `databaseId` from the Step 1 result, where actor will store the result. + - Set `databaseId` from the Step 1 result, where Actor will store the result. - Set `idempotencyKey` to random value. - Set `requestUrl` to your Bubble backend workflow URL, for example: `https://your-app.bubbleapps.io/version-test/api/1.1/wf/webhook`. - ![Create a webhook](../images/bubble/step2_scraping.png) diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md b/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md index 62a91edab3..8a77a1bf7b 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/maps.md @@ -12,7 +12,7 @@ Search, extract, and enrich business data from Google Maps in Gumloop. The Gumloop Google Maps integration provides a native interface for running Apify’s Google Maps scrapers directly in your workflows. No API keys or manual polling required. All you need is a Gumloop account. -Using the Gumloop Google Maps MCP node, you can simply prompt the location data you need and Gumloop will retrieve it from relevant Apify actors. From there, you can connect it to your favorite tools and AI agents to process the information. +Using the Gumloop Google Maps MCP node, you can simply prompt the location data you need and Gumloop will retrieve it from relevant Apify Actors. From there, you can connect it to your favorite tools and AI agents to process the information. ## Available actions diff --git a/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md b/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md index 8a47eef30d..61e10bd92f 100644 --- a/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md +++ b/sources/platform/integrations/workflows-and-notifications/gumloop/tiktok.md @@ -11,7 +11,7 @@ Get TikTok hashtag videos, profile videos, followers, video details, and search --- The Gumloop TikTok integration provides a native interface for running Apify’s TikTok scrapers directly in your workflows. No API tokens or manual polling required. All you need is a Gumloop account. -Using the Gumloop TikTok MCP node, you can simply prompt the TikTok data you need and Gumloop will retrieve it from relevant Apify actors. From there, you can connect it to your favorite tools and AI agents to process the information. +Using the Gumloop TikTok MCP node, you can simply prompt the TikTok data you need and Gumloop will retrieve it from relevant Apify Actors. From there, you can connect it to your favorite tools and AI agents to process the information. ## Available actions diff --git a/sources/platform/proxy/google_serp_proxy.md b/sources/platform/proxy/google_serp_proxy.md index bba4ecb9d0..ddc39a0f7b 100644 --- a/sources/platform/proxy/google_serp_proxy.md +++ b/sources/platform/proxy/google_serp_proxy.md @@ -63,7 +63,7 @@ See a [full list](https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXW ### Using the Apify SDK -If you are developing your own Apify [Actor](../actors/index.mdx) using the [Apify SDK](/sdk) and [Crawlee](https://crawlee.dev/), the most efficient way to use Google SERP proxy is [CheerioCrawler](https://crawlee.dev/api/cheerio-crawler/class/CheerioCrawler). This is because Google SERP proxy [only returns a page's HTML](./index.md). Alternatively, you can use the [got-scraping](https://github.com/apify/got-scraping) [NPM package](https://www.npmjs.com/package/got-scraping) by specifying the proxy URL in the options. For Python, you can leverage the [`requests`](https://pypi.org/project/requests/) library along with the Apify SDK. +If you are developing your own Apify [Actor](../actors/index.mdx) using the [Apify SDK](/sdk) and [Crawlee](https://crawlee.dev/), the most efficient way to use Google SERP proxy is [CheerioCrawler](https://crawlee.dev/api/cheerio-crawler/class/CheerioCrawler). This is because Google SERP proxy [only returns a page's HTML](./index.md). Alternatively, you can use the [got-scraping](https://github.com/apify/got-scraping) [npm package](https://www.npmjs.com/package/got-scraping) by specifying the proxy URL in the options. For Python, you can leverage the [`requests`](https://pypi.org/project/requests/) library along with the Apify SDK. The following examples get a list of search results for the keyword **wikipedia** from the USA (`google.com`). diff --git a/sources/platform/security.md b/sources/platform/security.md index 6ac92f47f0..ec13e53011 100644 --- a/sources/platform/security.md +++ b/sources/platform/security.md @@ -27,7 +27,7 @@ To learn more about Apify's security practices, data protection measures, and co - List of our security certifications and compliance reports - Information about Apify's data protection controls - List of Apify's data subprocessors -- An AI Chatbot to answer your security-related questions +- An AI chatbot to answer your security-related questions ## Security Whitepaper From 5938e02846c9d2de3525d03cf6ce51df20d0ec92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:07:32 +0200 Subject: [PATCH 3/7] remove (hopefully) unnecessary regex pattern --- .vale.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vale.ini b/.vale.ini index 890c2d00ce..6d4cfe33a1 100644 --- a/.vale.ini +++ b/.vale.ini @@ -12,7 +12,7 @@ mdx = md [*.md] BasedOnStyles = Vale, Apify, write-good, Microsoft # Ignore URLs, HTML/XML tags, lines with =, emails, curly braces, inline code -TokenIgnores = (<\/?[A-Z][^>]*>), ([^\n]+=[^\n]*), ([^\n]+@[^\n]+\.[^\n]), ({[^}]*}) +TokenIgnores = (<\/?[A-Z][^>]*>), ([^\n]+@[^\n]+\.[^\n]), ({[^}]*}) # Ignore HTML comments and Markdown code blocks BlockIgnores = (?s) ()|(```.*?```) From 7250fdf3c20297b34426682cadc097205192c772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:15:39 +0200 Subject: [PATCH 4/7] add general headings to ignoredscopes --- .vale.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vale.ini b/.vale.ini index 6d4cfe33a1..f50ef97f65 100644 --- a/.vale.ini +++ b/.vale.ini @@ -1,6 +1,6 @@ StylesPath = .github/styles MinAlertLevel = warning -IgnoredScopes = code, tt, table, tr, td, frontmatter, link, alt +IgnoredScopes = code, tt, table, tr, td, frontmatter, link, alt, heading Vocab = Docs From e909c6c6bb2b1266ba4be1a46afccefe1894f176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:21:27 +0200 Subject: [PATCH 5/7] remove reduntant disables --- .vale.ini | 2 -- 1 file changed, 2 deletions(-) diff --git a/.vale.ini b/.vale.ini index f50ef97f65..8178ef411d 100644 --- a/.vale.ini +++ b/.vale.ini @@ -25,11 +25,9 @@ Microsoft.Contractions = NO Microsoft.Foreign = NO Microsoft.We = NO Microsoft.Quotes = NO -Microsoft.ThereIs = NO Microsoft.Auto = NO Microsoft.URLFormat = NO Microsoft.GeneralURL = NO -Microsoft.RangeFormat = NO [{README.md,CONTRIBUTING.md}] Apify.H1 = NO From cc6c41f64d840465a244fb77a869b31d5ca70178 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Thu, 18 Sep 2025 19:57:38 +0200 Subject: [PATCH 6/7] fix autogenerated ToC --- .../programming_interface/environment_variables.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sources/platform/actors/development/programming_interface/environment_variables.md b/sources/platform/actors/development/programming_interface/environment_variables.md index 25529b0848..3daf654ccf 100644 --- a/sources/platform/actors/development/programming_interface/environment_variables.md +++ b/sources/platform/actors/development/programming_interface/environment_variables.md @@ -17,13 +17,8 @@ import TabItem from '@theme/TabItem'; You can set up environment variables for your Actor in two ways: -- [How to use environment variables in an Actor](#how-to-use-environment-variables-in-an-actor) -- [System environment variables](#system-environment-variables) - [Set up environment variables in `actor.json`](#set-up-environment-variables-in-actorjson) - [Set up environment variables in Apify Console](#set-up-environment-variables-in-apify-console) -- [Access environment variables](#access-environment-variables) -- [Use the `Configuration` class](#use-the-configuration-class) -- [Build-time environment variables](#build-time-environment-variables) :::info Environment variable precedence From 82f3e5bdfe943edfa7ab249ec770c16ff1c033ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Olender?= <92638966+TC-MO@users.noreply.github.com> Date: Tue, 30 Sep 2025 23:38:09 +0200 Subject: [PATCH 7/7] adjust substition Apify rule --- .github/styles/Apify/Apify.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/styles/Apify/Apify.yml b/.github/styles/Apify/Apify.yml index c6dae86a44..12077e4473 100644 --- a/.github/styles/Apify/Apify.yml +++ b/.github/styles/Apify/Apify.yml @@ -7,9 +7,9 @@ swap: # Product name changes 'apify dashboard': Apify Console 'apify console': Apify Console - 'Apify console': Apify Console 'apify store': Apify Store - 'Apify store': Apify Store + 'the apify console': Apify Console + 'the apify store': Apify Store # Capitalization fixes 'apify freelancers': Apify freelancers