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.
| Target | Country | Matched products | Checks/day | Reason |
|---|---|---|---|---|
| Store A | US | 5,000 | 2 | Morning and evening price review |
| Store B | US | 3,100 | 2 | Partial assortment |
| Store A | CA | 4,400 | 1 | Daily 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:
- use sitemaps or categories for discovery;
- fetch detail pages for changed, new, or high-priority products;
- 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:
| Mode | Planning multiplier |
|---|---|
| Raw HTML or JSON | 1× |
| Browser without JavaScript | 2.5× |
| Typical JavaScript-rendered page | 10× |
| Heavy browser page | 15× |
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.
| Outcome | Default decision | What to record |
|---|---|---|
| 200 with valid fields | Accept | Useful record, latency, credits |
| 200 with missing or inconsistent fields | Validate once, then investigate parser | Schema failure and page version |
| 404 or 410 | Usually do not retry immediately | Product removal or mapping change |
| 403 | Stop or investigate authorization and target policy | Target, request policy, response evidence |
| 429 | Respect Retry-After; reduce rate | Delay, route, concurrency |
| 5xx | Bounded delayed retry when safe | Status and retry number |
| Timeout | Bounded retry with backoff and jitter | Phase, 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:
| Mode | With retries | Before buffer | Monthly estimate | Smallest listed tier |
|---|---|---|---|---|
| Raw HTML / JSON, 1× | 1,980,000 | 1,980,000 | 2,376,000 | 2.5M |
| Browser, no JS, 2.5× | 1,980,000 | 4,950,000 | 5,940,000 | 10M |
| JavaScript, 10× | 1,980,000 | 19,800,000 | 23,760,000 | 50M |
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:
- Confirm that every target and data field is lawful and authorized to collect.
- Sample products with variants, promotions, missing inventory, and regional differences.
- Test raw HTML or a documented endpoint before enabling JavaScript.
- Validate identifier, price, currency, availability, country context, and timestamp.
- Compare scheduled requests with actual network attempts.
- Record useful results, retry attempts, status mix, and timeouts.
- Measure provider credits per useful observation.
- Test conservative pacing and honor documented limits and
Retry-After. - Verify whether requests are independent or require a sticky IP.
- Run long enough to include normal catalog and template variation.
- Recalculate with observed retry and request-mode multipliers.
- 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
- FineProxy rotating proxy product documentation — current request-credit guidance, capacity tiers, rotation model, plan validity, and test allocation; reviewed 2026-07-26.
- FineProxy Terms of Service — provider terms governing use; reviewed 2026-07-26.
- RFC 9110: HTTP Semantics — HTTP status, caching, and retry semantics.
- RFC 6585: Additional HTTP Status Codes — 429 and
Retry-After.
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.