Lead lists

Build targeted prospect lists from the technologies, keywords, and account attributes that match your market. Lead lists can include websites, company and contact details, social media profiles, and other enrichment data for prospecting, segmentation, and reporting.

List all lists

Returns the lead lists you have created so you can monitor status, pricing, and available results.

Endpoint

GET https://api.wappalyzer.com/v2/lists/

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Response body

Name Description
id The list's unique identifier.
createdAt List creation date as a UNIX timestamp.
status List status. One of Calculating, Ready, Failed, Insufficient or Complete.
totalCredits The price of the list in credits.
technologies Array of technologies.
keywords Array of keywords.
rows The total number of results in the list per technology.

Example

Request
curl -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/"
Response
[ { "id": "lst_abcdef", "createdAt": 1620687647, "status": "Ready", "totalCredits": 1000, "technologies": [ { "slug": "shopify", "name": "Shopify", "categories": [ { "slug": "ecommerce", "name": "Ecommerce" } ], "operator": "=", "version": null }, ], "keywords": [], "rows": 1000 } ]

Fetch a list

Returns the full details of a list by its ID, including filters, pricing, download URLs, and field coverage once the list is ready.

Endpoint

GET https://api.wappalyzer.com/v2/lists/{id}

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Path parameters

Parameter Description
id The list's unique identifier, e.g. lst_abcdef.

Response body

Name Description
id The list's unique identifier, e.g. lst_abcdef.
createdAt List creation date as a UNIX timestamp.
status List status. One of Calculating, Ready, Failed, Insufficient or Complete.
technologies Array of technologies.
keywords Array of keywords.
languages Array of language codes (ISO 639-1), e.g. en-us.
countries Array of two-letter country codes (ISO 3166-2), e.g. US.
industries Array of industries, e.g. Fashion & Apparel.
companySizes Array of company sizes, e.g. 1,001-5,000 employees
tlds Array of top-level domains, e.g. .com.
matchCountryLanguage Filtering by both country and language (true) or either (false).
matchTechnologies Operator for the technology filter, one of or, and or not.
rootPath Only include websites that have the selected technology on the root path (typically the homepage).
subset Limits the number of results in the list per technology. Use subsetSlice to target higher or lesser trafficked websites.
subsetSlice Websites in the list are sorted in order of traffic. When a subset is specified, subsetSlice determines which section of the list the results should be taken from (i.e. top or bottom). Set to 0-4 for highest, high, medium, low and lowest traffic, respectively. Default is 0 for highest traffic.

This option has no effect when subset is equal to or larger than the total number of available results.
subdomains Include or exclude subdomains in the results. One of include, exclude or merge.
minAge Include results that were verified at least minAge months ago (0-11, default is 0).
maxAge Include results that were verified at most maxAge months ago (1-12, default 2). The default includes the current calendar month and the two previous months (UTC).
fromDate Only include websites that were discovered after a date (UNIX timestamp).
requiredSets Array of required field sets, see Fields.
excludeNoTraffic Exclude websites that don't include traffic data.
excludeMultilingual Exclude websites with content in more than one language.
sets Array of field sets to include in the results.
callbackUrl Callback URL that's notified when the list is ready.
totalCredits The price of the list in credits.
url URL of a ZIP file with the list.
sampleUrl URL of a ZIP file with a sample taken from the list.
rows Number of results in the list per technology.
setRows Number of values included in the list per field set.
suppressionListId The suppression list used for this list, if any.
baseListId ID of the list that was used as a base for this list, if any.
baseList Details of the list that was used as a base for this list, if any.

Example

Request
curl -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/lst_abcdef"
Response
{ "id": "lst_abcdef", "createdAt": 1620687647, "status": "Ready", "technologies": [ { "slug": "shopify", "name": "Shopify", "categories": [ { "slug": "ecommerce", "name": "Ecommerce" } ], "operator": "=", "version": null }, ], "keywords": [ "FASHION" ], "languages": [ "en-us" ], "countries": [ "US" ], "industries": [ "Fashion & Apparel" ], "companySizes": [ "1,001-5,000 employees" ], "tlds": [ ".com" ], "matchCountryLanguage": false, "matchTechnologies": "or", "rootPath": false, "subset": 1000, "subsetSlice": 0, "subdomains": "include", "minAge": 0, "maxAge": 2, "fromDate": null, "requiredSets": [ "email" ], "excludeNoTraffic": false, "excludeMultilingual": false, "sets": [ "email", ], "callbackUrl": "https://yourdomain/wappalyzer", "format": "csv", "totalCredits": 1000, "url": null, "sampleUrl": "https://lists.wappalyzer.com/wappalyzer-29ddddaa-4949-4217-86a7-f6a407e5853d-lst_abcdef-5ukjhs-sample.zip", "rows": { "shopify": 1000 }, "setRows": { "email": 1000, }, "baseListId": "lst_abcdef" }

Create a list

Create a new lead list from technologies, keywords, and company filters. Use this endpoint to turn your ICP criteria into a downloadable prospect set.

Endpoint

POST https://api.wappalyzer.com/v2/lists

Properties

Property Description
Execution Asynchronous
Request timeout 20 seconds
Rate limit 10 requests per second

25 requests per day

3 concurrent requests (lists with Calculating status)
Pricing Free

Request body

Name Description
technologies Array of technologies to filter by (no more than 50).
Name Description
slug (required) Technology slug, e.g. hubspot-chat. Refer to the full list of technologies (JSON).
version Optional version number to target, e.g. 1.0.0.
operator Version number operator, one of = (exact match), >= (great than or equal to) or <= (lower than or equal to).
categories Array of category slugs to filter by (e.g. payment-processors). Refer to the full list of categories (JSON).

If a category includes more than 50 technologies, only the top 50 technologies will be selected.
keywords Array of keywords to filter by, e.g. fashion. Keywords must be alphanumeric (a-z0-9) and work best with English nouns. Prefix with not  to exclude, e.g. not fashion.
languages Array of language codes (ISO 639-1) to filter, e.g. en-us.
countries Array of two-letter country codes (ISO 3166-2) to filter, e.g. US.
industries Array of industries, e.g. Fashion & Apparel.
companySizes Array of company sizes to filter, e.g. 5000 for 1,001-5,000 employees.
tlds Array of top-level domains to filter, e.g. .com.
matchCountryLanguage Filter by both country and language (true) or either (false).
matchTechnologies Operator for the technology filter, one of or (match any), and (match all) or not (match the first technology, exclude all others).
rootPath Only include websites that have the selected technology on the root path (typically the homepage).
subset Limit the number of results in the list per technology. Use subsetSlice to target high or low traffic websites.
subsetSlice Websites in the list are sorted in order of traffic. When a subset is specified, subsetSlice determines which section of the list the results should be taken from (i.e. top or bottom). Set to 0-4 for highest, high, medium, low and lowest traffic, respectively. Default is 0 for highest traffic.

This option has no effect when subset is equal to or larger than the total number of available results.
minAge Include results that were verified at least minAge months ago (0-11, default is 0).
maxAge Include results that were verified at most maxAge months ago (1-12, default is 2). The default includes the current calendar month and the two previous months (UTC).
fromDate Only include websites that were discovered after a date (UNIX timestamp, e.g. 1620687647).
requiredSets Array of required field sets, e.g. email. See Fields.
subdomains Include or exclude subdomain in the results. One of include (default), exclude or merge.

By selecting merge, data for subdomains (such as languages and traffic) on a domain will be combined into a single result.
excludeNoTraffic Exclude websites that don't include traffic data (true or false (default)).
excludeMultilingual Exclude websites with content in more than one language (true or false (default)).
suppressionListId ID of a ready suppression list uploaded by your account. Reuse it to exclude the same domains from multiple lead lists. Can be combined with excludeListId. See Suppression lists below.
excludeListId ID of an existing lead list whose websites you want to exclude, e.g. lst_abcdef. Any URLs that appear in this list will be excluded from the new list.

This function is recursive, i.e. if an excluded list excludes another list, both are excluded. Limited to ten lists or 500,000 websites.
baseListId ID of a list to use as a base, e.g. lst_abcdef. The results will be filtered to only include websites that are also in the base list.
sets Array of field sets to include in the results, e.g. email. See Fields.
callbackUrl Callback URL that's notified when the list is ready, e.g. https://yourdomain.com/wappalyzer.
format Output file format, one of csv (default) or json.

Initial response body

The initial response only includes the list ID and current status. Detailed fields such as totalCredits, sampleUrl, rows and setRows become available through the callback payload below or when fetching the list later.

Name Description
id The list's unique identifier.
status List status. One of Calculating, Ready, Failed, Insufficient or Complete.

Callback response

Use a callback URL to continue your workflow as soon as a list is ready. List generation can take anywhere from a few seconds to a couple of hours depending on the query, so callbacks are the easiest way to avoid polling.

Example

Request
curl -X POST -H "Content-Type: application/json" -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/" -d '{ "technologies": [ { "slug": "shopify" } ] }'
Response
{ "id": "lst_abcdef", "status": "Calculating" }
Callback response

Your callback URL receives a POST request when the list is ready to price and finalize.

{ "id": "lst_abcdef", "status": "Ready", "rows": { "shopify": 1000 }, "setRows": { "email": 1000 }, "totalCredits": 1000, "sampleUrl": "https://lists.wappalyzer.com/wappalyzer-29ddddaa-4949-4217-86a7-f6a407e5853d-lst_abcdef-5ukjhs-sample.zip" }

Suppression lists

Exclude websites from your results using an uploaded suppression list or an existing lead list. Exclusions apply before the result limit, sample, export and credit calculation.

A suppression list is a reusable list of domains you want to exclude, such as existing customers. Upload it once and pass its suppressionListId when creating lead lists. To exclude websites from an existing lead list, use excludeListId. You can use both in the same request. Uploading and reusing a suppression list does not spend credits.

Upload and use a suppression list

  1. Upload the file in a single request. The response contains a reusable ID. No name or file size is required.
  2. Fetch the ID every two seconds until its status is Ready. If it becomes Invalid, check the error message and correct the file.
  3. Pass that ID as suppressionListId to POST /v2/lists. Continue with the usual sample review and list finalization. Reuse the same ID for subsequent lists.

You can also list all suppression lists, fetch a suppression list or delete a suppression list.

File format and matching

Use an uncompressed UTF-8 text file containing one domain or HTTP(S) URL per line, with no header. Blank lines are ignored. Domain matching ignores case and a leading www.; duplicates count once. Invalid lines reject the entire upload and report the line number. Files are never silently truncated.

Matching uses the existing lead-list subdomain rules. With subdomains: "include", an entry for example.com does not exclude every subdomain automatically. With subdomains: "merge", excluding the root domain also excludes the merged result for that domain.

Limits and storage

Limit Allowance per account
File size 20 MiB (20,971,520 bytes)
Unique domains per list 250,000
Total storage 100 MiB (104,857,600 bytes)
New uploads 20 per UTC calendar day
Pending or validating uploads Two at once

These limits are shared by all API keys on the account. Storage is checked after upload and validation, using the size of the validated file. There is no storage reservation. Files that exceed the storage quota are rejected and removed. Original uploads and invalid files are removed after processing; interrupted uploads are scheduled for cleanup after 15 minutes. Background processing retries temporary failures for up to one hour; uploads that still cannot be processed become invalid and are cleaned up. Cleanup retries run every five minutes. Validated files remain available until deleted, and files retained for existing lead lists continue to count against storage.

Each upload creates a new ID for a fixed set of domains. To replace a suppression file, upload a new version and use its new ID in subsequent requests. Existing lead lists continue using their original set of domains. When combined with excludeListId, the existing combined limit of 500,000 exclusions still applies.

Suppression list response fields

These fields are shared by the upload, fetch and deletion responses. File contents are not returned.

Name Description
id The unique suppression list ID. Pass it as suppressionListId when creating a lead list.
name The optional name provided with the upload; otherwise, the ID.
status One of Pending, Validating, Ready, Invalid, Retired or Deleted. Only Ready IDs can be used in new lead lists.
createdAt Creation date as a UNIX timestamp in seconds.
domainCount The number of unique domains, available after validation.
sizeBytes The validated file size in bytes; initially zero. This can differ from the uploaded file size after blank lines and duplicates are removed.
error The validation error, when available.
retiredAt The retirement date as a UNIX timestamp in seconds, when available.

Upload a suppression list

Uploads a file in one request, returning a reusable ID while validation runs in the background. Send the file itself as the request body with Content-Type: text/plain. No JSON wrapper, form fields or separate completion request are needed.

Endpoint

POST https://api.wappalyzer.com/v2/lists/suppressions

Properties

Property Description
Execution Asynchronous validation after upload
Upload timeout 60 seconds to receive and store the file
Upload limits Two at once; 20 per UTC calendar day
Pricing Free

Request body

Required. An uncompressed UTF-8 text file of up to 20 MiB, with one domain or HTTP(S) URL per line and no header. See file format and matching. application/octet-stream is also accepted.

Query parameters

Name Description
name Optional. A label of 1–100 characters. Defaults to the returned ID.

Response body

Returns 202 Accepted and the suppression list fields once the file is stored. Fetch the ID every two seconds while its status is Pending or Validating. Once it is Ready, the response includes domainCount and validated sizeBytes; pass the ID as suppressionListId when creating lead lists. If it becomes Invalid, read error and correct the file before uploading again. A fast validation may finish before the upload response arrives.

Files over 20 MiB return 413. Exceeding the daily or simultaneous upload limit returns 429. File-content errors and account-storage limits are checked in the background and reported with status Invalid and an error message.

The examples upload suppression.txt without a name or file size, then check its status until it is ready. The cURL example also uses jq to read the JSON responses. If polling stops before processing finishes, keep the ID and fetch its status later.

Example

Request
api="https://api.wappalyzer.com/v2/lists/suppressions" key="<your api key>" result=$(curl --fail-with-body --max-time 75 -X POST \ -H "Content-Type: text/plain" -H "x-api-key: $key" \ --data-binary @suppression.txt "$api") || exit 1 id=$(printf '%s' "$result" | jq -r '.id') echo "Suppression ID: $id" for attempt in $(seq 1 60); do case $(printf '%s' "$result" | jq -r '.status') in Ready) printf '%s\n' "$result"; exit 0 ;; Pending|Validating) sleep 2 ;; *) printf '%s\n' "$result" >&2; exit 1 ;; esac result=$(curl --fail-with-body --max-time 30 \ -H "x-api-key: $key" "$api/$id") || exit 1 done echo "Still processing. Fetch $id again later."
Response
{ "id": "sup_0123456789abcdef0123456789abcdef", "name": "sup_0123456789abcdef0123456789abcdef", "status": "Pending", "createdAt": 1792886400, "sizeBytes": 0 }

List suppression lists

Returns up to 100 suppression lists per page, along with the storage allocation and limits shared by all API keys on your account.

Endpoint

GET https://api.wappalyzer.com/v2/lists/suppressions

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Query parameters

Name Description
cursor Optional. Pass nextCursor from the preceding response to fetch the next page. Omit it for the first page.

Response body

Name Description
lists An array of suppression list records.
nextCursor The next page cursor, or null when there are no more pages.
allocatedBytes Total validated file storage, including files retained for existing lead lists.
limits The account limits shown below. Sizes are in bytes and durations are in seconds.

Example

Request
curl --fail-with-body -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/suppressions"
Response
{ "lists": [ { "id": "sup_0123456789abcdef0123456789abcdef", "name": "sup_0123456789abcdef0123456789abcdef", "status": "Ready", "createdAt": 1792886400, "domainCount": 2, "sizeBytes": 23 } ], "nextCursor": null, "allocatedBytes": 23, "limits": { "fileBytes": 20971520, "domains": 250000, "accountBytes": 104857600, "uploadsPerDay": 20, "pendingUploads": 2, "uploadSeconds": 300, "activeUploadSeconds": 900, "abandonedSeconds": 86400 } }

Fetch a suppression list

Returns the status and metadata for one suppression list. Use this to check whether validation has completed.

Endpoint

GET https://api.wappalyzer.com/v2/lists/suppressions/{suppressionId}

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Path parameters

Name Description
suppressionId The suppression list ID returned by the upload. It must belong to your account.

Response body

Returns the suppression list fields.

Example

Request
curl --fail-with-body -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/suppressions/sup_0123456789abcdef0123456789abcdef"
Response
{ "id": "sup_0123456789abcdef0123456789abcdef", "name": "sup_0123456789abcdef0123456789abcdef", "status": "Ready", "createdAt": 1792886400, "domainCount": 2, "sizeBytes": 23 }

Delete a suppression list

Retires the ID so it cannot be used in new lead-list requests. Existing lead lists and repeat jobs continue using their original set of excluded domains.

Endpoint

DELETE https://api.wappalyzer.com/v2/lists/suppressions/{suppressionId}

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Path parameters

Name Description
suppressionId The suppression list ID returned by the upload. It must belong to your account.

Response body

Returns the suppression list fields with status Retired, or Deleted if cleanup has already completed. Repeating deletion is safe while the record remains available.

Example

Request
curl --fail-with-body -X DELETE -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/suppressions/sup_0123456789abcdef0123456789abcdef"
Response
{ "id": "sup_0123456789abcdef0123456789abcdef", "name": "sup_0123456789abcdef0123456789abcdef", "status": "Retired", "createdAt": 1792886400, "domainCount": 2, "sizeBytes": 23, "retiredAt": 1792890000 }

Deletion does not immediately reclaim storage. Cleanup waits at least 24 hours and retains the file while lead lists reference it. Delete those lead lists to release their retained file. Cleanup is asynchronous; cleaned metadata expires after seven days.

Suppression list response codes

Status Description
200 The fetch, list or deletion request succeeded.
202 The file is stored and queued for validation. Check the ID's status and wait for Ready before using it.
400 Invalid request parameters or an empty upload. File-content errors are reported through the ID's Invalid status.
403 The API key is missing or invalid.
404 The ID is unknown or belongs to another account.
408 The upload was interrupted or exceeded 60 seconds. Check the returned ID before uploading again.
409 A concurrent update is in progress, or the ID is not in the required state. Only Ready IDs can be used in lead lists.
413 The file exceeds the permitted size.
415 Use an uncompressed file with Content-Type: text/plain or application/octet-stream.
429 The daily upload, pending-upload or API request rate limit has been reached.
503 The upload service is unavailable. Check the returned ID before uploading again.
504 The upload timed out. Check existing IDs before starting another upload.

Finalize a list

When a list is ready, finalize it to spend credits and unlock the full download URL. After payment, the list status changes to Complete.

Endpoint

POST https://api.wappalyzer.com/v2/lists/{id}

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing 1 Credit per website

Path parameters

Parameter Description
id The list's unique identifier, e.g. lst_abcdef.

Request body

Name Description
spendCredits The number of credits to spend. This value must exactly match the list's totalCredits, obtained from either the callback response or fetch endpoint.

Example

Request
curl -X POST -H "Content-Type: application/json" -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/lst_abcdef" -d '{ "spendCredits": 1000 }'
Response
{ "id": "lst_abcdef", "status": "Complete", "url": "https://lists.wappalyzer.com/wappalyzer-29ddddaa-4949-4217-86a7-f6a407e5853d-lst_abcdef-5ukjhs.zip", }

Delete a list

Permanently delete a list you no longer need.

Endpoint

DELETE https://api.wappalyzer.com/v2/lists/{id}

Properties

Property Description
Execution Synchronous
Request timeout 20 seconds
Rate limit 10 requests per second
Pricing Free

Path parameters

Parameter Description
id The list's unique identifier, e.g. lst_abcdef.

Example

Request
curl -X DELETE -H "x-api-key: <your api key>" "https://api.wappalyzer.com/v2/lists/lst_abcdef"
Response
{}