ScrapeBudget guide

How to Size Proxy Capacity for Ecommerce Price Monitoring

Turn products, competitors, countries, freshness targets, rendering overhead, and retries into an auditable monthly capacity estimate for public price monitoring.

Define products, competitors, countries, and freshness

Capacity begins with a collection matrix, not a proxy plan. Define four dimensions:

  • Products: canonical items or offer pages that must be observed.
  • Competitors: public storefronts or marketplaces where those items appear.
  • Countries: storefront or locale variants needed for a legitimate business decision.
  • Freshness: the maximum acceptable age of a price observation.

A request is useful only when it fills a required cell in that matrix. Write the matrix before multiplying. If only 60% of products are sold by competitor B, use the known 60% mapping instead of assuming a complete Cartesian product.

TargetCountryMatched productsChecks/dayReason
Store AUS5,0002Morning and evening price review
Store BUS3,1002Partial assortment
Store ACA4,4001Daily regional review

The monthly base is the sum of these rows. This approach also supports different freshness targets: volatile products can run more frequently without multiplying the entire catalog.

Define a useful result before implementation. For example: “a validated product identifier, currency, current public price, availability state, source URL, and observation timestamp.” Counting HTML responses without validating those fields overstates monitoring coverage.

Calculate monthly page loads

For a uniform matrix:

base page loads =
products
× competitors
× countries
× checks per day
× active days per month

For a realistic sparse matrix:

base page loads =
sum(
  matched product URLs for target-country pair
  × checks per day for that pair
  × active days
)

Then account for extra attempts and request complexity:

page loads with retries =
base page loads × (1 + retry overhead percent / 100)

estimated monthly credits =
ceil(
  page loads with retries
  × request-mode multiplier
  × (1 + safety buffer percent / 100)
)

Retry overhead means extra attempts relative to scheduled page loads. It is not the initial error rate. The safety buffer is separate so that measured failures do not get mixed with uncertainty about catalog growth or rendering behavior.

Track discovery requests too. A workflow that refreshes sitemaps, categories, and product mappings may have:

monthly requests =
discovery requests
+ scheduled detail requests
+ bounded retry requests
+ validation or reconciliation requests

Product pages versus category pages

Product pages often expose precise identifiers, variants, availability, and one current price. Category pages may return many products per response but can be incomplete, personalized, paginated, or sorted differently across visits.

Use category pages when they reliably satisfy the data contract. Suppose a category endpoint returns 48 validated products per page and a 4,800-product catalog needs 100 category requests. Two daily checks across three sites for 30 days create:

100 category pages × 3 sites × 2 checks × 30 days
= 18,000 base page loads

Fetching every product page would create:

4,800 product pages × 3 sites × 2 checks × 30 days
= 864,000 base page loads

The category strategy is smaller only if it produces the required fields and complete coverage. If category responses omit variant prices, the collector may need a hybrid:

  1. use sitemaps or categories for discovery;
  2. fetch detail pages for changed, new, or high-priority products;
  3. reconcile the full catalog on a lower-frequency schedule.

Do not infer a request reduction until a sample proves the endpoint's pagination, localization, and completeness.

JavaScript and asset overhead

Rendering mode often matters more than small catalog adjustments. The calculator uses these planning multipliers:

ModePlanning multiplier
Raw HTML or JSON
Browser without JavaScript2.5×
Typical JavaScript-rendered page10×
Heavy browser page15×

The provider guidance cited below describes a simple HTML or JSON request as approximately one credit, a browser request without JavaScript as roughly 2–3 credits, a typical full headless request as roughly 10 credits, and heavy pages as 10–15 or more. Each loaded downstream asset may count.

These are planning assumptions, not guaranteed billing values. Inspect the network waterfall:

  • Is the price embedded in initial HTML or structured data?
  • Does a public JSON endpoint return the same value?
  • Is JavaScript needed to compute the price, or only to present it?
  • Which requests are essential to the useful result?
  • Can images, fonts, analytics, video, and unrelated widgets be omitted lawfully?

If raw HTML works, prefer it. If a browser is required, create an allowlist for necessary resource types and domains, then validate that blocking resources does not change the price, currency, or variant context.

Retries, 403, 429, and timeouts

Do not give every error the same retry policy.

OutcomeDefault decisionWhat to record
200 with valid fieldsAcceptUseful record, latency, credits
200 with missing or inconsistent fieldsValidate once, then investigate parserSchema failure and page version
404 or 410Usually do not retry immediatelyProduct removal or mapping change
403Stop or investigate authorization and target policyTarget, request policy, response evidence
429Respect Retry-After; reduce rateDelay, route, concurrency
5xxBounded delayed retry when safeStatus and retry number
TimeoutBounded retry with backoff and jitterPhase, duration, network outcome

A request can consume provider capacity even if the target returns an error or times out after reaching provider infrastructure. Therefore:

retry overhead =
all retry attempts / scheduled page loads

Set a retry budget per target and per scheduling window. For example, a 10% global overhead does not mean every failed URL receives 10 retries; it means total extra attempts should remain near one-tenth of planned work. Pause a target when a burst of 403 or 429 responses indicates the request policy needs review.

Country-specific price monitoring

Country is more than an IP location. A price can depend on storefront hostname, URL path, currency, language, account state, shipping destination, taxes, cookies, or headers. Document the exact observation context:

target country
storefront URL
currency
language
tax inclusion
shipping inclusion
anonymous or authorized account state
observation timestamp

Do not multiply countries blindly. If one regional endpoint exposes all currencies in a lawful, documented response, one request may cover several rows. If the storefront provides distinct catalogs, maintain separate URL mappings and measure coverage.

Location-specific collection can have legal and contractual implications. Limit collection to a legitimate purpose, avoid collecting non-public personal data, and obtain review for jurisdictions and data categories in scope. A geographic proxy is a routing tool, not proof that an observation represents every customer in that country.

Scheduling and rate limits

Freshness is an objective; request frequency is one way to achieve it. A simple fixed schedule can cause synchronized bursts at the top of the hour. Spread work across the available window:

average request rate =
scheduled page loads / collection-window seconds

If 15,000 pages must be checked over six hours:

15,000 / (6 × 60 × 60) ≈ 0.69 scheduled requests/second

That average does not authorize a rate. Apply documented limits and target-specific pacing, cap concurrency, and add jitter so workers do not converge on one host. Keep separate queues per target so one site's delay or circuit breaker does not block every competitor.

Use priority classes:

  • changed or high-value products at the required freshness;
  • regular products at a moderate interval;
  • stable or unavailable products at a lower interval;
  • discovery and reconciliation outside peak collection windows.

Record scheduled time and completed time. If queue delay makes observations stale, reduce scope or add an authorized collection window before increasing concurrency.

Example architecture

A small monitoring system does not need a complex proxy-control plane:

Catalog mapping
    ↓ creates target-country jobs
Scheduler
    ↓ places jobs into per-target queues
Workers
    ↓ fetch through policy-selected proxy route
Parser and validator
    ├─ valid observation → normalized price store
    ├─ permanent mapping error → review queue
    └─ transient error → bounded retry queue
Metrics
    └─ attempts, useful records, credits, latency, status mix

Keep these concerns separate:

  • the scheduler decides freshness and scope;
  • the request policy decides endpoint, rendering mode, pacing, and proxy pattern;
  • the parser produces a typed observation;
  • the validator rejects missing currency, implausible structure, or mismatched products;
  • the retry policy classifies failures;
  • metrics link provider usage to useful records.

Store proxy credentials in a secret manager or environment variable, never in source code, downloaded results, or analytics. Use a stable workflow identifier in logs rather than a full URL when URLs may contain sensitive query values.

Worked example for 5,000 products

Assume:

  • 5,000 matched products;
  • three competitors;
  • two countries;
  • two checks per day;
  • 30 active days;
  • 10% retry overhead;
  • 20% safety buffer.

The uniform base is:

5,000 × 3 × 2 × 2 × 30 = 1,800,000 page loads

Compare request modes:

ModeWith retriesBefore bufferMonthly estimateSmallest listed tier
Raw HTML / JSON, 1×1,980,0001,980,0002,376,0002.5M
Browser, no JS, 2.5×1,980,0004,950,0005,940,00010M
JavaScript, 10×1,980,00019,800,00023,760,00050M

The business workload is identical in all three rows. Only the collection method changes, yet the listed boundary moves from 2.5M to 50M. The first engineering task should be proving the least capacity-intensive request mode that returns accurate price, currency, product, and availability fields.

If only half of the catalog needs two daily checks and the other half needs one, calculate the groups separately:

fast group = 2,500 × 3 × 2 × 2 × 30 = 900,000
slow group = 2,500 × 3 × 2 × 1 × 30 = 450,000
combined base                              = 1,350,000

Segmented scheduling reduces base volume by 25% relative to the uniform two-check model without weakening freshness for the priority products.

Trial checklist

Before selecting production capacity:

  1. Confirm that every target and data field is lawful and authorized to collect.
  2. Sample products with variants, promotions, missing inventory, and regional differences.
  3. Test raw HTML or a documented endpoint before enabling JavaScript.
  4. Validate identifier, price, currency, availability, country context, and timestamp.
  5. Compare scheduled requests with actual network attempts.
  6. Record useful results, retry attempts, status mix, and timeouts.
  7. Measure provider credits per useful observation.
  8. Test conservative pacing and honor documented limits and Retry-After.
  9. Verify whether requests are independent or require a sticky IP.
  10. Run long enough to include normal catalog and template variation.
  11. Recalculate with observed retry and request-mode multipliers.
  12. Review the provider's current documentation and terms before purchase.

Calculator CTA

Size your ecommerce monitoring workload with the number of products per storefront, target storefronts, checks per day, active days, rendering mode, retry overhead, and safety buffer. For a sparse product-country matrix, calculate each group separately and add the results.

Then use How to Reduce Web Scraping Credit Usage Without Losing Useful Data to challenge the endpoint, asset, retry, and freshness assumptions before committing to capacity.

Responsible use: Focus on lawfully accessible public product information. Respect website terms, access controls, intellectual-property and privacy obligations, robots directives where applicable, and reasonable rate limits. Do not collect account-only or personal data without clear authorization and a documented legal basis.

Sources

Affiliate disclosure: ScrapeBudget is independent. If a rotating plan matches an independent-request trial, this sponsored link shows current FineProxy options. ScrapeBudget may earn a commission at no additional cost to you. Verify current terms and actual target behavior before purchasing.