From 80bcd4ddd1ff45e71f145a01c8cb83e204c96036 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Jul 2026 19:46:31 +0000 Subject: [PATCH 1/6] docs: fix high and medium inaccuracies in storage, proxy, console, and other pages - storage/dataset.md: tabulation column limit 3000 -> 2000 - storage/key-value-store.md: key length limit 63 -> 256 chars (+ allowed characters) - storage/request_queue.md: clarify non-CRUD rate limits (request-lock 400/s, batch and head-lock 40/s, others 60/s) - monitoring/index.md: aggregated alert interval 15 -> 20 minutes - schedules.md: document random time offset applied to @hourly/@daily/@weekly/@monthly/@yearly shortcuts - proxy/datacenter_proxy.md: rotation selects oldest IP from a random subset, not all IPs - proxy/google_serp_proxy.md: invalid num values are rejected with 400, not silently ignored - proxy/index.md: residential session lifetime 1 minute -> ~30 minutes (provider-specific) - proxy/residential_proxy.md: session persistence ~30 minutes (provider-set), reworked keep-alive tip - proxy/your_own_proxies.md: tab labeled Input (not "Input and options"); proxy section is schema-defined - console/settings.md: MCP connector button label "Create new connector" -> "Add connector" - console/store.md: fix Actors in Store link to served route /platform/actors/running/actors-in-store --- sources/platform/console/settings.md | 2 +- sources/platform/console/store.md | 2 +- sources/platform/monitoring/index.md | 2 +- sources/platform/proxy/datacenter_proxy.md | 4 ++-- sources/platform/proxy/google_serp_proxy.md | 4 ++-- sources/platform/proxy/index.md | 2 +- sources/platform/proxy/residential_proxy.md | 6 +++--- sources/platform/proxy/your_own_proxies.md | 2 +- sources/platform/schedules.md | 6 ++++++ sources/platform/storage/dataset.md | 2 +- sources/platform/storage/key_value_store.md | 2 +- sources/platform/storage/request_queue.md | 4 ++++ 12 files changed, 24 insertions(+), 14 deletions(-) diff --git a/sources/platform/console/settings.md b/sources/platform/console/settings.md index 25df3408f7..b27205474c 100644 --- a/sources/platform/console/settings.md +++ b/sources/platform/console/settings.md @@ -44,7 +44,7 @@ The **MCP connectors** section lets you authorize third-party MCP servers (such #### Create a connector -1. Open **Settings > API & Integrations > MCP connectors** and click **Create new connector**. +1. Open **Settings > API & Integrations > MCP connectors** and click **Add connector**. 1. Enter the MCP server URL, for example: ```text diff --git a/sources/platform/console/store.md b/sources/platform/console/store.md index 256ce435da..2df28d332a 100644 --- a/sources/platform/console/store.md +++ b/sources/platform/console/store.md @@ -22,4 +22,4 @@ Once you select an Actor from the store, you'll be directed to its specific page Search results in Apify Console are personalized to each individual user, so the same query can return different Actors than the public Store at [apify.com/store](https://apify.com/store). Both Console and the public Store rank Actors using parameters similar to those in the [Actor quality score](/platform/actors/publishing/quality-score). -For more information, see [Actors in Store](/sources/platform/actors/running/store/index.md). +For more information, see [Actors in Store](/platform/actors/running/actors-in-store). diff --git a/sources/platform/monitoring/index.md b/sources/platform/monitoring/index.md index 2b94d18481..76dcd6a9d8 100644 --- a/sources/platform/monitoring/index.md +++ b/sources/platform/monitoring/index.md @@ -43,7 +43,7 @@ When you set up an alert, you have four choices for how you want the metrics to 2. **Alert, when the metric is higher than** - This type of alert is checked both during the run and after the run finishes. During the run, we do periodic checks (approximately every 5 minutes) so that we can notify you as soon as possible if the metric is higher than the value you set. After the run finishes, we do a final check to make sure that the metric does not go over the limit in the last few minutes of the run. -3. **Alert, when run status is one of following** - This type of alert is checked only after the run finishes. It makes possible to track the status of your finished runs and send an alert if the run finishes in a state you do not expect. If your Actor runs very often and suddenly starts failing, you will receive a single alert after the first failed run in 1 minute, and then aggregated alert every 15 minutes. +3. **Alert, when run status is one of following** - This type of alert is checked only after the run finishes. It makes possible to track the status of your finished runs and send an alert if the run finishes in a state you do not expect. If your Actor runs very often and suddenly starts failing, you will receive a single alert after the first failed run in 1 minute, and then aggregated alert every 20 minutes. 4. **Alert for dataset field statistics** - If you have a [dataset schema](../actors/development/actor_definition/dataset_schema/validation.md) set up, then you can use the field statistics to set up an alert. You can use field statistics for example to track if some field is filled in all records, if some numeric value is too low/high (for example when tracking the price of a product over multiple sources), if the number of items in an array is too low/high (for example alert on Instagram Actor if post has a lot of comments) and many other tasks like these. diff --git a/sources/platform/proxy/datacenter_proxy.md b/sources/platform/proxy/datacenter_proxy.md index 4ec5fb9eb4..2fdb1fe2b9 100644 --- a/sources/platform/proxy/datacenter_proxy.md +++ b/sources/platform/proxy/datacenter_proxy.md @@ -10,14 +10,14 @@ import TabItem from '@theme/TabItem'; Datacenter proxies are a cheap, fast and stable way to mask your identity online. When you access a website using a datacenter proxy, the site can only see the proxy center's credentials, not yours. -Datacenter proxies allow you to mask and [rotate](./index.md#ip-address-rotation) your IP address during web scraping and automation jobs, reducing the possibility of them being [blocked](/academy/anti-scraping/techniques#access-denied). For each [HTTP/S request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods), the proxy takes the list of all available IP addresses and selects the one used the longest time ago for the specific hostname. +Datacenter proxies allow you to mask and [rotate](./index.md#ip-address-rotation) your IP address during web scraping and automation jobs, reducing the possibility of them being [blocked](/academy/anti-scraping/techniques#access-denied). For each [HTTP/S request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods), the proxy picks a small random subset of the available IP addresses and, from that subset, selects the one used the longest time ago for the specific hostname. You can refer to the [blog post](https://blog.apify.com/datacenter-proxies-when-to-use-them-and-how-to-make-the-most-of-them/) for tips on how to make the most out of datacenter proxies. ## Features * Periodic health checks of proxies in the pool so requests are not forwarded via dead proxies. -* Intelligent rotation of IP addresses so target hosts are accessed via proxies that have accessed them the longest time ago, to reduce the chance of blocking. +* Intelligent rotation of IP addresses so target hosts are accessed via proxies from a random subset that have accessed them the longest time ago, to reduce the chance of blocking. * Periodically checks whether proxies are banned by selected target websites. If they are, stops forwarding traffic to them to get the proxies unbanned as soon as possible. * Ensures proxies are located in specific countries using IP geolocation. * Allows selection of groups of proxy servers with specific characteristics. diff --git a/sources/platform/proxy/google_serp_proxy.md b/sources/platform/proxy/google_serp_proxy.md index 8870bfae78..4a904bdd25 100644 --- a/sources/platform/proxy/google_serp_proxy.md +++ b/sources/platform/proxy/google_serp_proxy.md @@ -84,8 +84,8 @@ Use Google's `start` parameter to handle pagination manually. The `start` parame Google has deprecated the `num` query parameter, which previously controlled the number of results displayed per page. -:::caution Ignored parameter -If you include the `num` parameter in your requests, it will be ignored. Google no longer supports this parameter, and Google SERP proxy does not process it. +:::caution Unsupported parameter +Because Google no longer supports the `num` parameter, Google SERP proxy does not use it to control the number of results per page. A request with an invalid `num` value (for example `num=0` or a non-numeric value) is rejected with a `400` error, so avoid sending it. ::: To retrieve more than 10 results, use the `numPages` parameter described before instead. diff --git a/sources/platform/proxy/index.md b/sources/platform/proxy/index.md index 4c01e0ceb1..f9186f32a2 100644 --- a/sources/platform/proxy/index.md +++ b/sources/platform/proxy/index.md @@ -232,7 +232,7 @@ Sessions allow you to use the same IP address for multiple connections. When you To set a new session, pass the `session` parameter in your [username](#username-parameters) field when connecting to a proxy. This will serve as the session's ID and an IP address will be assigned to it. To [use that IP address in other requests](/platform/proxy/datacenter-proxy#connecting-to-datacenter-proxies), pass that same session ID in the username field. We recommend the [SessionPool](https://crawlee.dev/api/core/class/SessionPool) abstraction for managing sessions. The created session will then store information such as cookies and can be used to generate [browser fingerprints](/academy/anti-scraping/mitigation/generating-fingerprints). You can also assign custom user data such as authorization tokens and specific headers. -Sessions are available for [datacenter](./datacenter_proxy.md) and [residential](./residential_proxy.md#session-persistence) proxies. For datacenter proxies, a session persists for **26 hours** ([more info](./datacenter_proxy.md)). For residential proxies, it persists for **1 minute** ([more info](./residential_proxy.md#session-persistence)) but you can prolong the lifetime by regularly using the session. Google SERP proxies do not support sessions. +Sessions are available for [datacenter](./datacenter_proxy.md) and [residential](./residential_proxy.md#session-persistence) proxies. For datacenter proxies, a session persists for **26 hours** ([more info](./datacenter_proxy.md)). For residential proxies, it persists for around **30 minutes**, depending on the upstream provider ([more info](./residential_proxy.md#session-persistence)). Google SERP proxies do not support sessions. ## Proxy groups diff --git a/sources/platform/proxy/residential_proxy.md b/sources/platform/proxy/residential_proxy.md index d1ccf4122f..ebffe292c3 100644 --- a/sources/platform/proxy/residential_proxy.md +++ b/sources/platform/proxy/residential_proxy.md @@ -162,13 +162,13 @@ When using residential proxy with the `session` [parameter](./index.md#sessions) **Session IDs represent IP addresses. Therefore, you can manage the IP addresses you use by managing sessions.** [[More info](./index.md#sessions)] -This IP/session ID combination is persisted for 1 minute. Each subsequent request resets the expiration time to 1 minute. +This IP/session ID combination persists for around 30 minutes. The exact session lifetime is set by the upstream provider that handles the request (for example, Oxylabs and IPRoyal both use a 30-minute lifetime). If the proxy server becomes unresponsive or the session expires, a new IP address is selected for the next request. -:::tip Keep sessions alive +:::tip Reuse sessions -To keep a session active, send a request through it before its 1-minute timer expires (for example, every 20 seconds). Each request resets the timer, so as long as the connection isn't interrupted, the session persists. +To keep using the same IP address, reuse the same session ID within its lifetime. Once the session expires, a new IP address is assigned. ::: diff --git a/sources/platform/proxy/your_own_proxies.md b/sources/platform/proxy/your_own_proxies.md index c9f54f6411..5a448095e8 100644 --- a/sources/platform/proxy/your_own_proxies.md +++ b/sources/platform/proxy/your_own_proxies.md @@ -9,7 +9,7 @@ In addition to Apify Proxy, you can use your own proxies both in Apify Console a ## Custom proxies in console -To use your own proxies with Apify Console, in your Actor's **Input and options** tab, scroll down and open the **Proxy and browser configuration** section. Enter your proxy URLs, and you're good to go. +To use your own proxies with Apify Console, in your Actor's **Input** tab, scroll down and open the **Proxy and browser configuration** section (available for Actors whose input schema defines it). Enter your proxy URLs, and you're good to go. ![Using custom proxy in Apify Console](../images/proxy-custom.png) diff --git a/sources/platform/schedules.md b/sources/platform/schedules.md index 7b9147c563..e382be63b4 100644 --- a/sources/platform/schedules.md +++ b/sources/platform/schedules.md @@ -157,3 +157,9 @@ Additionally, you can use the following shortcut expressions: * `@weekly` = `0 0 * * 0` - once a week, on Sunday at midnight. * `@daily` = `0 0 * * *` - run once a day, at midnight. * `@hourly` = `0 * * * *` - on the hour, every hour. + +:::note Random time offset + +To avoid usage spikes, these shortcut expressions do not fire at the exact time shown. The platform adds a random offset to each run: 1 - 30 minutes for `@hourly`, 5 minutes - 6 hours for `@daily`, 5 minutes - 12 hours for `@weekly`, and 5 minutes - 24 hours for `@monthly` and `@yearly`. The offset is fixed per schedule when it is created. To run at an exact time, use the equivalent full cron expression instead. + +::: diff --git a/sources/platform/storage/dataset.md b/sources/platform/storage/dataset.md index 89a77cb28f..72a5eaf908 100644 --- a/sources/platform/storage/dataset.md +++ b/sources/platform/storage/dataset.md @@ -484,7 +484,7 @@ See the [Storage overview](/platform/storage#share-storages-between-runs) for de ## Limits -- Data storage formats that use tabulation (like HTML, CSV, and EXCEL) are limited to a maximum of _3000_ columns. Data exceeding this limit will not be retrieved. +- Data storage formats that use tabulation (like HTML, CSV, and EXCEL) are limited to a maximum of _2000_ columns. Data exceeding this limit will not be retrieved. - The `pushData()`method is constrained by the receiving API's size limit. It accepts objects with JSON size under _9MB_. While individual objects within an array must not exceed _9MB_, the overall size has no restriction. diff --git a/sources/platform/storage/key_value_store.md b/sources/platform/storage/key_value_store.md index 137a9e0360..46689d6d86 100644 --- a/sources/platform/storage/key_value_store.md +++ b/sources/platform/storage/key_value_store.md @@ -346,4 +346,4 @@ Key-value storage uses the [AWS S3](https://aws.amazon.com/s3/) service. Accordi ## Limits -- The maximum length for a key in a key-value store is 63 characters. +- The maximum length for a key in a key-value store is 256 characters. Keys may only contain the following characters: `a-zA-Z0-9!-_.'()`. diff --git a/sources/platform/storage/request_queue.md b/sources/platform/storage/request_queue.md index 0f3b774659..eb74e77f1a 100644 --- a/sources/platform/storage/request_queue.md +++ b/sources/platform/storage/request_queue.md @@ -642,6 +642,10 @@ CRUD ([add](/api/v2/request-queue-requests-post), [delete](/api/v2/request-queue-request-delete)) operation requests are limited to _400 requests per second_ per request queue. This helps protect Apify servers from being overloaded. +Request-lock operations ([prolong](/api/v2/request-queue-request-lock-put) and [delete](/api/v2/request-queue-request-lock-delete) a lock) are also limited to _400 requests per second_ per request queue. + +Batch operations ([add](/api/v2/request-queue-requests-batch-post) and [delete](/api/v2/request-queue-requests-batch-delete)) and the [list and lock head](/api/v2/request-queue-head-lock-post) endpoint are limited to _40 requests per second_ per request queue. + All other request queue API [endpoints](/api/v2/storage-request-queues) are limited to _60 requests per second_ per request queue. Check out the [API documentation](/api/v2#rate-limiting) for more information and guidance on actions to take if you exceed these rate limits. From 3e564f89c6df2887188f3fc11db1e1dc74d349fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Trunk=C3=A1t?= Date: Fri, 3 Jul 2026 08:55:24 +0200 Subject: [PATCH 2/6] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- sources/platform/storage/dataset.md | 2 +- sources/platform/storage/request_queue.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/platform/storage/dataset.md b/sources/platform/storage/dataset.md index 72a5eaf908..bb333cd448 100644 --- a/sources/platform/storage/dataset.md +++ b/sources/platform/storage/dataset.md @@ -484,7 +484,7 @@ See the [Storage overview](/platform/storage#share-storages-between-runs) for de ## Limits -- Data storage formats that use tabulation (like HTML, CSV, and EXCEL) are limited to a maximum of _2000_ columns. Data exceeding this limit will not be retrieved. +- Data storage formats that use tabulation (like HTML, CSV, and Excel) are limited to a maximum of _2000_ columns. Data exceeding this limit will not be retrieved. - The `pushData()`method is constrained by the receiving API's size limit. It accepts objects with JSON size under _9MB_. While individual objects within an array must not exceed _9MB_, the overall size has no restriction. diff --git a/sources/platform/storage/request_queue.md b/sources/platform/storage/request_queue.md index eb74e77f1a..9f0208abcf 100644 --- a/sources/platform/storage/request_queue.md +++ b/sources/platform/storage/request_queue.md @@ -642,7 +642,7 @@ CRUD ([add](/api/v2/request-queue-requests-post), [delete](/api/v2/request-queue-request-delete)) operation requests are limited to _400 requests per second_ per request queue. This helps protect Apify servers from being overloaded. -Request-lock operations ([prolong](/api/v2/request-queue-request-lock-put) and [delete](/api/v2/request-queue-request-lock-delete) a lock) are also limited to _400 requests per second_ per request queue. +Request-lock operations ([prolong a lock](/api/v2/request-queue-request-lock-put) and [delete a lock](/api/v2/request-queue-request-lock-delete)) are also limited to _400 requests per second_ per request queue. Batch operations ([add](/api/v2/request-queue-requests-batch-post) and [delete](/api/v2/request-queue-requests-batch-delete)) and the [list and lock head](/api/v2/request-queue-head-lock-post) endpoint are limited to _40 requests per second_ per request queue. From 21f163aed2b711baa70035b5fe059610a3c97247 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Jul 2026 06:58:32 +0000 Subject: [PATCH 3/6] docs: remove schedule random-offset note per review --- sources/platform/schedules.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sources/platform/schedules.md b/sources/platform/schedules.md index e382be63b4..7b9147c563 100644 --- a/sources/platform/schedules.md +++ b/sources/platform/schedules.md @@ -157,9 +157,3 @@ Additionally, you can use the following shortcut expressions: * `@weekly` = `0 0 * * 0` - once a week, on Sunday at midnight. * `@daily` = `0 0 * * *` - run once a day, at midnight. * `@hourly` = `0 * * * *` - on the hour, every hour. - -:::note Random time offset - -To avoid usage spikes, these shortcut expressions do not fire at the exact time shown. The platform adds a random offset to each run: 1 - 30 minutes for `@hourly`, 5 minutes - 6 hours for `@daily`, 5 minutes - 12 hours for `@weekly`, and 5 minutes - 24 hours for `@monthly` and `@yearly`. The offset is fixed per schedule when it is created. To run at an exact time, use the equivalent full cron expression instead. - -::: From f41c55c00ba367089cc47b79335f54a88595b3d6 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Jul 2026 08:47:53 +0000 Subject: [PATCH 4/6] docs: simplify residential session note and drop num validation note per review - residential_proxy.md: state ~30 min persistence without naming upstream providers - google_serp_proxy.md: revert num note to original (deprecated/ignored param) --- sources/platform/proxy/google_serp_proxy.md | 4 ++-- sources/platform/proxy/residential_proxy.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/platform/proxy/google_serp_proxy.md b/sources/platform/proxy/google_serp_proxy.md index 4a904bdd25..8870bfae78 100644 --- a/sources/platform/proxy/google_serp_proxy.md +++ b/sources/platform/proxy/google_serp_proxy.md @@ -84,8 +84,8 @@ Use Google's `start` parameter to handle pagination manually. The `start` parame Google has deprecated the `num` query parameter, which previously controlled the number of results displayed per page. -:::caution Unsupported parameter -Because Google no longer supports the `num` parameter, Google SERP proxy does not use it to control the number of results per page. A request with an invalid `num` value (for example `num=0` or a non-numeric value) is rejected with a `400` error, so avoid sending it. +:::caution Ignored parameter +If you include the `num` parameter in your requests, it will be ignored. Google no longer supports this parameter, and Google SERP proxy does not process it. ::: To retrieve more than 10 results, use the `numPages` parameter described before instead. diff --git a/sources/platform/proxy/residential_proxy.md b/sources/platform/proxy/residential_proxy.md index ebffe292c3..879a7edacb 100644 --- a/sources/platform/proxy/residential_proxy.md +++ b/sources/platform/proxy/residential_proxy.md @@ -162,7 +162,7 @@ When using residential proxy with the `session` [parameter](./index.md#sessions) **Session IDs represent IP addresses. Therefore, you can manage the IP addresses you use by managing sessions.** [[More info](./index.md#sessions)] -This IP/session ID combination persists for around 30 minutes. The exact session lifetime is set by the upstream provider that handles the request (for example, Oxylabs and IPRoyal both use a 30-minute lifetime). +This IP/session ID combination persists for around 30 minutes. If the proxy server becomes unresponsive or the session expires, a new IP address is selected for the next request. From 4506a717e1a50692a0b16ecbe917be9e1cd14364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Trunk=C3=A1t?= Date: Fri, 3 Jul 2026 12:57:49 +0200 Subject: [PATCH 5/6] Update index.md --- sources/platform/proxy/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/platform/proxy/index.md b/sources/platform/proxy/index.md index f9186f32a2..2d3f39b9ea 100644 --- a/sources/platform/proxy/index.md +++ b/sources/platform/proxy/index.md @@ -232,7 +232,7 @@ Sessions allow you to use the same IP address for multiple connections. When you To set a new session, pass the `session` parameter in your [username](#username-parameters) field when connecting to a proxy. This will serve as the session's ID and an IP address will be assigned to it. To [use that IP address in other requests](/platform/proxy/datacenter-proxy#connecting-to-datacenter-proxies), pass that same session ID in the username field. We recommend the [SessionPool](https://crawlee.dev/api/core/class/SessionPool) abstraction for managing sessions. The created session will then store information such as cookies and can be used to generate [browser fingerprints](/academy/anti-scraping/mitigation/generating-fingerprints). You can also assign custom user data such as authorization tokens and specific headers. -Sessions are available for [datacenter](./datacenter_proxy.md) and [residential](./residential_proxy.md#session-persistence) proxies. For datacenter proxies, a session persists for **26 hours** ([more info](./datacenter_proxy.md)). For residential proxies, it persists for around **30 minutes**, depending on the upstream provider ([more info](./residential_proxy.md#session-persistence)). Google SERP proxies do not support sessions. +Sessions are available for [datacenter](./datacenter_proxy.md) and [residential](./residential_proxy.md#session-persistence) proxies. For datacenter proxies, a session persists for **26 hours** ([more info](./datacenter_proxy.md)). For residential proxies, it persists for around **30 minutes** ([more info](./residential_proxy.md#session-persistence)). Google SERP proxies do not support sessions. ## Proxy groups From 878e90b3b6fc34260ca53c0dcb597b612fb6028f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Trunk=C3=A1t?= Date: Fri, 3 Jul 2026 14:09:23 +0200 Subject: [PATCH 6/6] Update datacenter_proxy.md --- sources/platform/proxy/datacenter_proxy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/platform/proxy/datacenter_proxy.md b/sources/platform/proxy/datacenter_proxy.md index 2fdb1fe2b9..f2806aa6ab 100644 --- a/sources/platform/proxy/datacenter_proxy.md +++ b/sources/platform/proxy/datacenter_proxy.md @@ -10,7 +10,7 @@ import TabItem from '@theme/TabItem'; Datacenter proxies are a cheap, fast and stable way to mask your identity online. When you access a website using a datacenter proxy, the site can only see the proxy center's credentials, not yours. -Datacenter proxies allow you to mask and [rotate](./index.md#ip-address-rotation) your IP address during web scraping and automation jobs, reducing the possibility of them being [blocked](/academy/anti-scraping/techniques#access-denied). For each [HTTP/S request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods), the proxy picks a small random subset of the available IP addresses and, from that subset, selects the one used the longest time ago for the specific hostname. +Datacenter proxies allow you to mask and [rotate](./index.md#ip-address-rotation) your IP address during web scraping and automation jobs, reducing the possibility of them being [blocked](/academy/anti-scraping/techniques#access-denied). For each [HTTP/S request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods), the proxy takes the list of all available IP addresses and selects the one used the longest time ago for the specific hostname. You can refer to the [blog post](https://blog.apify.com/datacenter-proxies-when-to-use-them-and-how-to-make-the-most-of-them/) for tips on how to make the most out of datacenter proxies.