name: Wappalyzer API Rate Limits description: Rate limiting policies for the Wappalyzer REST API, applied per API key across all endpoint types. version: '0.2' url: https://www.wappalyzer.com/docs/api/v2/lookup/ generated: '2026-08-14' method: searched source: https://www.wappalyzer.com/docs/api/v2/basics/ sources: - https://www.wappalyzer.com/docs/api/v2/basics/ - https://www.wappalyzer.com/docs/api/v2/lookup/ - https://www.wappalyzer.com/openapi/v2-public.yaml - https://www.wappalyzer.com/pricing/ published_numeric_limit: false publisher_statement: >- Wappalyzer states only that its endpoints "are metered and rate-limited" and publishes no numeric request-rate figure and no rate-limit response headers. The runtime signal a caller actually gets is the credit header pair below, plus HTTP 429 on exhaustion. The per-second and per-request figures recorded under limits[] are documented request-shape constraints and credit quotas, not a published requests-per-second ceiling. runtime_headers: rate_limit_headers_published: false retry_after: not documented credit_headers: - name: wappalyzer-credits-spent description: Number of credits deducted by the request. source: https://www.wappalyzer.com/docs/api/v2/basics/ declared_in_spec: true - name: wappalyzer-credits-remaining description: Remaining credit balance after the request completes. source: https://www.wappalyzer.com/docs/api/v2/basics/ declared_in_spec: true note: >- No RateLimit-* (draft-ietf-httpapi-ratelimit-headers) and no X-RateLimit-* headers are declared in the published OpenAPI 3.1 contract or documented. The credit headers are on every successful response and are the only budget signal available at runtime. balance_endpoint: GET https://api.wappalyzer.com/v2/credits/balance/ status_codes_published: - {code: 429, meaning: Rate limit exceeded, source: https://www.wappalyzer.com/docs/api/v2/basics/} - {code: 403, meaning: 'Authorization failure — incorrect API key, invalid method or resource, OR insufficient credits', source: https://www.wappalyzer.com/docs/api/v2/basics/} correction_2026-08-14: >- An earlier revision of this file recorded HTTP 402 for credit exhaustion. The provider's own response-code table publishes only 200, 400, 403 and 429, and folds "insufficient credits" into 403. 402 is not used. Corrected here and in errors/wappalyzer-problem-types.yml. limits: - name: Request Rate Limit description: Maximum number of API requests allowed per second per API key scope: per API key limit: 10 unit: requests per second enforcement: server-side rejection with HTTP 429 applies_to: - Lookup API - Analyze API - Crawl API - Dataset API - name: URLs Per Request description: Maximum number of website URLs that can be submitted in a single Lookup API request scope: per request limit: 10 unit: URLs per request enforcement: request validation error applies_to: - Lookup API - name: Monthly Credit Quota description: Total API credits available per billing month, determined by plan tier; credits consumed at 1 per standard URL lookup or 5 per live recursive crawl URL scope: per account per month unit: credits tiers: - plan: Free limit: 50 - plan: Pro limit: 5000 - plan: Business limit: 20000 - plan: Enterprise limit: 200000 enforcement: HTTP 403 when credits are depleted (the provider folds insufficient credits into 403; 402 is not used) applies_to: - Lookup API - Analyze API - Crawl API - name: Request Timeout description: Maximum elapsed time for a synchronous API request before the server terminates it scope: per request limit: 30 unit: seconds enforcement: timeout error; use callback_url for async deep crawls applies_to: - Lookup API - Analyze API - name: Async Crawl Duration description: Maximum time allowed for deep recursive crawl jobs submitted with a callback_url scope: per crawl job limit: 15 unit: minutes enforcement: job timeout; partial results may be delivered via callback applies_to: - Crawl API creditConsumption: - operation: Standard lookup (prefetched/cached result) creditsConsumed: 1 parameterCondition: live=false (default) - operation: Live single-page scan creditsConsumed: 1 parameterCondition: live=true, recursive=false - operation: Live recursive multi-page crawl creditsConsumed: 5 parameterCondition: live=true, recursive=true headers: authentication: x-api-key creditsSpent: wappalyzer-credits-spent creditsRemaining: wappalyzer-credits-remaining rateLimit: none published errorCodes: - code: 429 meaning: Rate limit exceeded - code: 403 meaning: >- Authorization failure — incorrect API key, invalid method or resource, or insufficient credits. All three share this status; call GET /credits/balance to disambiguate. - code: 400 meaning: There was an error with the request