Up to 100 profiles in one call, each with the same fields as the single-domain profile, including the latest traffic and employee estimates. Hostnames we do not hold come back in a missing array.
Up to 100 profiles in one call, each with the same fields as the single-domain profile, including the latest traffic and employee estimates. Hostnames we do not hold come back in a missing array.
| Name | In | Type | Required | Meaning |
|---|---|---|---|---|
| domains | body | string[] | yes | 1 to 100 hostnames. Duplicates are collapsed before they are counted. |
curl https://getdomaindata.com/api/v1/domains/batch \
-H "Authorization: Bearer gdd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"domains":["allbirds.com","example.invalid"]}'const KEY = process.env.GDD_API_KEY;
const r = await fetch("https://getdomaindata.com/api/v1/domains/batch", {
method: "POST",
headers: { Authorization: "Bearer " + KEY, "Content-Type": "application/json" },
body: JSON.stringify({"domains":["allbirds.com","example.invalid"]}),
});
const { data } = await r.json();
console.log(r.headers.get("X-Quota-Remaining"), data);import os, requests
h = {"Authorization": "Bearer " + os.environ["GDD_API_KEY"]}
r = requests.post("https://getdomaindata.com/api/v1/domains/batch", headers=h, json={"domains":["allbirds.com","example.invalid"]})
print(r.headers.get("X-Quota-Remaining"), r.json()["data"]){
"data": [
{
"domain": "allbirds.com",
"resolves": true,
"technologies": [
"Amazon SES",
"Apple",
"Cloudflare",
"DigiCert/Azure",
"DocuSign",
"Google",
"Google Tag Manager",
"HSTS",
"..."
],
"network": "Shopify",
"platform": "shopify",
"registrar": null,
"age_days": null,
"country_iso": null,
"lang_norm": "en",
"http_status": null,
"redirect_to": null,
"traffic": {
"estimated_monthly_visits": 2137979,
"band": "1M-10M",
"as_of": "2026-08"
},
"employees": {
"apex": "allbirds.com",
"low": 501,
"high": 2000,
"point": null,
"as_of": "2026-09-10"
}
}
],
"missing": [
"example.invalid"
]
}| Field | Type | Meaning |
|---|---|---|
| data | object[] | One profile per hostname we hold, same shape as the domain endpoint. |
| missing | string[] | Hostnames from your list that we do not hold. Each still counted as one lookup. |
| 401 invalid_key | The key is missing, malformed, or revoked. Check the Authorization header and the key on your account page. Revoked keys stop on the next request. |
| 429 rate_limited | Too many requests this minute for your plan. Back off until the reset time in the body, then retry. |
| 402 quota_exhausted | This month's lookups are spent. Wait for the first of the month, or add a pack from the account page. The API never throttles silently. |
| 400 bad_batch | The body is not {"domains": [...]} with 1 to 100 valid hostnames. Send a JSON body with a domains array of at most 100 hostnames. |
| 503 metering_unavailable | The quota could not be read, so nothing was served. Retry in a moment. No lookup was spent. |