API reference

Paths are relative to the base URL below. Every response is JSON; dates are ISO 8601 in UTC and counts are plain numbers. If this is your first call, start with the quick start.

https://api.datacrawly.io/v1

Authentication

A bearer token in the Authorization header on every request. Keys are created in your account and belong to the organization, not the person; revoking one takes effect on the next request.

Authorization: Bearer <your key>

Errors

Errors are JSON with a stable code and a human message. Branch on the code; the message can change wording in any release.

{
  "code": "not_found",
  "message": "Domain is not in the index yet"
}
StatusCodeWhen
400validation_failedA parameter or body field is missing or of the wrong shape. The message names it.
401unauthorizedNo Authorization header, or a key that is wrong, expired or revoked.
402insufficient_creditsThe organization's balance cannot cover the call. Nothing was charged.
404not_foundThe domain is not in the index. Look it up on the site to request a crawl, or try later.
429rate_limitedOver 60 requests a minute for this key. Retry-After says how long to wait.
503service_unavailableTemporary. The same request is worth sending again.

Credits and limits

Calls are metered in credits from the same balance as the rest of the product; the cost of each endpoint is listed next to it. A domain read in the last 30 days is free to read again. The rate limit is 60 requests a minute per key.

Endpoints

Site profile

GET/sites/{domain}

Everything the index holds about one site: technologies with versions, tracking IDs, contacts, outbound links, the pages checked and the change timeline.

Parameters
domain: a bare hostname, normalized as described in the quick start.
Cost
1 credit; free again for 30 days.
Response
SiteProfile, or 404 not_found

Request

curl https://api.datacrawly.io/v1/sites/thedentalarchitect.com \
  -H "Authorization: Bearer dck_4kQ2mP7xR9tA9f1c0a4e2b6d83e5a7c1f0b9d2e4a6c8"

Response

{
  "domain": "thedentalarchitect.com",
  "title": "The Dental Architect, Private Dentist, Leeds City Centre",
  "description": "The Dental Architect, Leeds: Yorkshire's largest Invisalign provider & Dentist of the Year 2025. Private dental care. Book now.",
  "lang": "en",
  "alive": true,
  "firstSeenAt": "2026-09-24T10:17:41.188Z",
  "lastCheckedAt": "2026-09-24T10:17:44.355Z",
  "pagesChecked": 2,
  "technologies": [
    { "slug": "wordpress", "label": "WordPress", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [{ "version": "7.1.2", "confidence": "exact" }] },
    { "slug": "wp-theme:astra", "label": "wp-theme:astra", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [{ "version": "4.13.12", "confidence": "weak" }] },
    { "slug": "wp-plugin:elementor-pro", "label": "wp-plugin:elementor-pro", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [{ "version": "4.2.2", "confidence": "likely" }] },
    { "slug": "wp-plugin:jetpack", "label": "wp-plugin:jetpack", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [{ "version": "16.1.3", "confidence": "likely" }] },
    { "slug": "jquery", "label": "jQuery", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [{ "version": "3.7.1", "confidence": "likely" }] },
    { "slug": "gtm", "label": "Google Tag Manager", "firstSeenAt": "2026-09-24T10:17:40.547Z",
      "versions": [] }
  ],
  "contacts": {
    "emails": ["[email protected]", "[email protected]"],
    "phones": ["01138684324"],
    "socials": [
      { "platform": "facebook", "url": "https://facebook.com/thedentalarchitectdentist" },
      { "platform": "instagram", "url": "https://instagram.com/thedentalarchitect" }
    ]
  },
  "tracking": [
    { "type": "ga4_measurement_id", "id": "G-NHLQXYXMZX", "sharedWith": 0 },
    { "type": "gtm_container_id", "id": "GTM-MB9GLVZV", "sharedWith": 0 },
    { "type": "google_ads_conversion_id", "id": "AW-16486622207", "sharedWith": 0 }
  ],
  "links": ["cqc.org.uk", "expertmediatech.co.uk", "portal.dental", "scoreapp.com"],
  "pages": [
    { "url": "https://thedentalarchitect.com/contact.html", "lastCheckedAt": "2026-09-24T10:17:44.355Z", "lastStatus": 200 },
    { "url": "https://thedentalarchitect.com/", "lastCheckedAt": "2026-09-24T10:17:40.547Z", "lastStatus": 200 }
  ],
  "timeline": [
    { "at": "2026-09-24T10:17:44.355Z", "change": "added", "kind": "email", "key": "", "value": "[email protected]" },
    { "at": "2026-09-24T10:17:44.355Z", "change": "added", "kind": "technology", "key": "", "value": "google-maps" }
  ]
}

Similar sites

GET/sites/{domain}/similar

Sites that share a tracking ID with this one first, then the ones with the most technologies in common.

Parameters
limit: 1 to 50, default 10.
Cost
1 credit per site returned.
Response
{ items: SiteRow[] }

Request

curl "https://api.datacrawly.io/v1/sites/thedentalarchitect.com/similar?limit=10" \
  -H "Authorization: Bearer dck_4kQ2mP7xR9tA9f1c0a4e2b6d83e5a7c1f0b9d2e4a6c8"

Response

{
  "items": [
    {
      "domain": "vicidental.com",
      "title": "VICI Dental: Cosmetic Dentistry & Smile Makeovers",
      "lang": "en",
      "alive": true,
      "technologies": [
        { "slug": "elementor", "label": "Elementor", "version": "4.3.1" },
        { "slug": "jquery", "label": "jQuery", "version": "3.7.1" },
        { "slug": "wordpress", "label": "WordPress", "version": "7.1.2" }
      ],
      "technologyCount": 19,
      "emails": 1,
      "phones": 2,
      "socials": 3,
      "tracking": 3,
      "firstSeenAt": "2026-09-24T10:17:44.339Z",
      "lastCheckedAt": "2026-09-24T10:17:50.136Z"
    }
  ]
}

Catalog

GET/sites/catalog

Every technology and language in the index with its site count: the vocabulary for the search filters.

Parameters
None.
Cost
Free.
Response
SiteCatalog

Request

curl https://api.datacrawly.io/v1/sites/catalog \
  -H "Authorization: Bearer dck_4kQ2mP7xR9tA9f1c0a4e2b6d83e5a7c1f0b9d2e4a6c8"

Types

The shapes above, as TypeScript. Dates are ISO strings; a null means the index has not seen the value.

type TechRef = { slug: string; label: string; version: string | null };

type SiteRow = {
  domain: string;
  title: string | null;
  lang: string | null;
  alive: boolean;                 // an open page answered 200
  technologies: TechRef[];        // up to 8, the ones with a version first
  technologyCount: number;
  emails: number; phones: number; socials: number; tracking: number;
  firstSeenAt: string;            // ISO 8601, UTC
  lastCheckedAt: string | null;
};

type Facet = { value: string; label: string; count: number };

type SiteListResult = {
  items: SiteRow[];
  total: number;
  page: number;
  pageSize: number;
  facets: { tech: Facet[]; lang: Facet[] };   // over the whole result, up to 60 each
  tookMs: number;
};

type SiteCatalog = {
  total: number;
  technologies: Facet[];          // every technology, by count
  languages: Facet[];
};

type SiteProfile = {
  domain: string;
  title: string | null;
  description: string | null;
  lang: string | null;
  alive: boolean;
  firstSeenAt: string;
  lastCheckedAt: string | null;
  pagesChecked: number;
  technologies: {
    slug: string; label: string; firstSeenAt: string;
    versions: { version: string; confidence: 'exact' | 'likely' | 'weak' | null }[];
  }[];
  contacts: {
    emails: string[]; phones: string[];
    socials: { platform: string; url: string }[];
  };
  tracking: { type: string; id: string; sharedWith: number }[];  // sharedWith: other sites with the same id
  links: string[];                // outbound domains
  pages: { url: string; lastCheckedAt: string; lastStatus: number }[];   // up to 50, newest first
  timeline: {
    at: string; change: 'added' | 'removed';
    kind: string; key: string; value: string;
  }[];                            // up to 200, newest first
};

OpenAPI

The same contract as an OpenAPI 3 document, for code generators and agents:

https://api.datacrawly.io/v1/openapi.json