WebPixie

Site

Query and manage monitored sites through the WebPixie GraphQL API.

Some features and limits mentioned on this page vary by plan. Visit our Pricing page to review the plans.

Fields

FieldTypeDescription
idID!Unique identifier for the site.
userIdID!ID of the user who added the site.
domainString!The monitored domain.
rootDomainString!The registrable root domain — e.g. acme.io for a site added as www.acme.io.
isFavoriteBoolean!Whether the site is marked as a favorite.
tags[String!]Names of the workspace tags attached to the site — see Tags & Folders.
folderIdIDID of the folder the site is placed in, if any — see Tags & Folders.
features[SiteFeatureTypes!]!Product areas enabled for this site.
notificationSiteNotificationConfig!Notification settings for this site — { all: Boolean! }.
sslSiteSSLSSL/TLS monitoring data, populated once MONITOR_SSL has run.
certificateSiteCertificateLatest certificate check data, populated once MONITOR_SSL has run.
whoisSiteWhoisWHOIS/domain registration data, populated once MONITOR_WHOIS has run.
dnsSiteDNSDNS monitoring data, populated once MONITOR_DNS has run.
mainPageSiteMainPageMain page data from the latest check.
robotsTxtSiteRobotsTxtrobots.txt data from the latest check.
sitemapSiteSitemapSitemap discovery data, populated once SITEMAP_CRAWLER has run.
linkSiteLinkStatsLink crawler summary stats, present when LINK_CRAWLER is enabled.
attachments[SiteAttachment!]Screenshots and favicons captured for the site.
createTime / updateTimeString! / StringISO 8601 timestamps for creation / last update.

Features

enum SiteFeatureTypes {
  MONITOR_WHOIS      # Enables WHOIS/domain registration monitoring.
  MONITOR_SSL        # Enables SSL/TLS certificate monitoring.
  MONITOR_DNS        # Enables DNS record monitoring.
  LINK_CRAWLER       # Enables the link crawler.
  SITEMAP_CRAWLER    # Enables sitemap discovery and crawling.
}

Check Results

ssl, certificate, whois, dns, robotsTxt, and sitemap above share a common wrapper shape:

FieldTypeDescription
createTime / updateTimeString! / StringISO 8601 timestamps for creation / last update.
checkTimeStringISO 8601 timestamp of the last check attempt, successful or not.
syncTimeStringISO 8601 timestamp of the last successful check, whether or not anything changed.

mainPage does not share this shape — see SiteMainPage below. link is a separate, lightweight stats object — see SiteLinkStats below.

SiteSSL

Adds to the common shape above:

FieldTypeDescription
payloadSiteSSLPayload
errorSiteSslErrorSet if the SSL check itself failed.

SiteCertificate

Adds to the common shape above:

FieldTypeDescription
payload[SiteCertificateRecord!]Same shape as findSiteCertificate's response items above.
errorSiteCertificateErrorSet if the certificate check itself failed.

SiteWhois

Adds to the common shape above:

FieldTypeDescription
payloadSiteWhoisPayload
errorSiteWhoisErrorSet if the WHOIS lookup itself failed.

SiteDNS

Adds to the common shape above:

FieldTypeDescription
payloadSiteDnsPayloadSee below.
errorSiteDnsErrorSet if the DNS lookup itself failed.

SiteDnsPayload

FieldTypeDescription
records[SiteDnsRecord!]Raw DNS records — { key: String!, values: [String!]!, ttl: Int! }.
spfSiteDnsSpfSPF record — { payload: [KeyValues!], error: SiteDnsRecordError }.
dmarcSiteDnsDmarcDMARC record — { payload: [KeyValue!], error: SiteDnsRecordError, source: DmarcSource }. source is ROOT or SUBDOMAIN, depending on whether the record was found on the root domain or the checked subdomain.
bimiSiteDnsBimiBIMI record — { payload: SiteDnsBimiPayload, error: SiteDnsRecordError }.
tlsRptSiteDnsTlsRptTLS-RPT record — { payload: SiteDnsTlsRptPayload, error: SiteDnsRecordError }.
mtaStsSiteDnsMtaStsMTA-STS record — { payload: SiteDnsMtaStsPayload, error: SiteDnsRecordError }.
ptr[KeyValues!]PTR (reverse DNS) records.
dnssecDnsSecStatusSECURE, BOGUS, INSECURE, or INDETERMINATE.
IPv4 / IPv6BooleanWhether the domain resolves over each protocol.
sourceString!Where the records were read from: authoritative or resolver.
server[String!]!The DNS servers the records were read from.

SiteDnsRecordError is the shared { code: DnsErrorCode!, message: String! } shape used by each derived-record error field above — see Error Codes: DNS.

KeyValues (plural) — used for ptr and the SPF/BIMI raw payloads: { key: String, values: [String!]!, payload: [KeyValues!] }, allowing nested key/value groups. Distinct from KeyValue (singular value).

SiteDnsBimiPayload — { value: String, version: String, logoUrl: String, authorityUrl: String }.

SiteDnsTlsRptPayload — { value: String, version: String, rua: String }.

SiteDnsMtaStsPayload — { value: String, version: String, id: String }.

SiteRobotsTxt

Adds to the common shape above:

FieldTypeDescription
payloadSiteRobotsTxtPayload!A union — see below. There is no separate error field; a fetch/parse failure is reported as the SiteRobotsTxtError member of the union itself.

SiteRobotsTxtPayload is a union of:

TypeFieldsDescription
SiteRobotsTxtValidcontent: String!, messages: [SiteRobotsTxtMessage!]!robots.txt was found and parsed without issues.
SiteRobotsTxtInvalidcontent: String, messages: [SiteRobotsTxtMessage!]!robots.txt was found but has parsing issues — messages explains what.
SiteRobotsTxtErrorcode: RobotsTxtErrorCode!, message: String!robots.txt couldn't be fetched.

SiteRobotsTxtMessage is itself a union of LineMessage ({ line: Int!, message: String!, code: RobotsTxtValidationErrorCode! }) and Message ({ message: String!, code: RobotsTxtValidationErrorCode! }) — LineMessage is used when an issue is tied to a specific line. See Error Codes: Robots.txt for the codes.

SiteSitemap

Adds to the common shape above. This is the summary object at sitemap itself — distinct from SiteSitemapFile / SiteSitemapLink, the findSiteSitemap / findSiteSitemapLink response items documented under Sitemap below.

FieldTypeDescription
statusSitemapStatus!PROCESSING, COMPLETE, or FAILED.
errorSiteSitemapDiscoveryErrorSet if sitemap discovery failed or some sitemap files could not be reached. There is no payload field here; use findSiteSitemap / findSiteSitemapLink to read discovered sitemap data.
summarySiteSitemapSummaryFile, URL entry and error counts from the last completed sitemap crawl.

SiteSitemapSummary

FieldTypeDescription
fileCountInt!Number of sitemap files found.
linkCountInt!Total number of URL entries across all sitemap files.
errors[SiteSitemapErrorSummaryItem!]!Number of sitemap files per error code — { code: SitemapErrorCode!, count: Int! }.

Other Site Types

SiteMainPage

Does not share the common wrapper shape above — it describes the latest check of the homepage, with no checkTime / syncTime.

FieldTypeDescription
urlStringThe final URL crawled, after redirects.
statusSiteLinkStatusCrawl status.
crawlTimeStringISO 8601 timestamp of the crawl.
pageMainWebpageThe fetched page's response data — see below.
httpSupport / httpsSupportBooleanWhether the site responds over each protocol.
httpsRedirectionBooleanWhether HTTP requests redirect to HTTPS.
http2Support / http3SupportBooleanWhether the site negotiates each HTTP version.
markdownSupportBooleanWhether the site serves Markdown when asked for it. null if it could not be determined.
paths[PagePath!]The URLs requested on the way to the main page, including redirects — { url: String!, page: Webpage }, using the generic Webpage shape.
errorSiteMainPageErrorSet if the crawl itself failed — { code: MainPageErrorCode!, message: String!, payload: [KeyValue!] }.

MainWebpage

Same fields as Webpage, plus:

FieldTypeDescription
timerWebpageTimerRequest timing breakdown, in seconds — { dnsResolution, connect, appConnect, preTransfer, startTransfer, total: Float! }.
browserBrowserPayloadHeadless-browser rendering data, if a browser-rendered check was performed — see below.

BrowserPayload

FieldTypeDescription
viewportBrowserViewport!{ width: Int!, height: Int!, devicePixelRatio: Float! }.
pageHeightInt!Rendered page height in pixels.
cookies[HttpCookie!]Cookies set during rendering — { name, value, domain, path: String!, expires: Int!, httpOnly, secure: Boolean!, sameSite: HttpCookieSameSiteType! }. sameSite is STRICT, LAX, NONE, or UNDEFINED.
jsErrors[String!]JavaScript errors thrown during rendering.
consoleLogs[BrowserConsoleLog!]Browser console output — { type: BrowserConsoleLogType!, text: String! }.
localStorage / sessionStorage[KeyValue!]Captured storage contents.

SiteLinkStats

link — a lightweight link-crawler summary. Distinct from SiteLink (individual crawled links, returned by findSiteLink — see Links below).

FieldTypeDescription
countInt!Number of links found for this site. If it is greater than limit, the site has more links than your plan tracks.
limitInt!Max links the link crawler will follow for this site, per your plan.

The same situation shows up per tag in siteLinkSummary as hasMore.

SiteAttachment

attachments — screenshots and favicons captured for the site.

FieldTypeDescription
createTimeString!ISO 8601 timestamp when this attachment was captured.
typeSiteAttachmentType!SCREENSHOT or FAVICON.
urlString!Temporary link to the image. Download it if you need to keep it.

Queries

getSite

Look up a single monitored site by domain.

query {
  getSite(domain: "acme.io") {
    id
    domain
    features
  }
}

Parameters

NameTypeDescription
domainString!The monitored domain.

Response: a Site (see Fields above), or null if not found.

findSite

Paginated, filterable list of your monitored sites.

query {
  findSite(query: "isFavorite = TRUE", limit: 25) {
    pagination {
      count
    }
    items {
      domain
      features
    }
  }
}

Parameters

NameTypeDescription
queryStringFilter expression — see Discovering Filterable Fields.
pageIntPage number, defaults to 1.
limitIntPage size, defaults to 10, capped at 100.
sort[Sort!]Sort order, defaults to newest first.

Response: a SiteList — pagination + items: [Site!]!. See Pagination & Sorting.

analyzeSite

Returns the domain's latest site analysis results.

query {
  analyzeSite(domain: "acme.io") {
    status
    summary {
      score
    }
  }
}

Parameters

NameTypeDescription
domainString!A domain already monitored in your workspace.

Response: an AnalyzeResult — see Types: Analysis for the nested AnalyzeSummary/SubAnalyzeResult shapes.

FieldType
summaryAnalyzeSummary!
headerSubAnalyzeResult!
commonSubAnalyzeResult!
whoisSubAnalyzeResult!
dnsSubAnalyzeResult!
sslSubAnalyzeResult!
statusSiteAnalyzeStatus!

status shows how complete the result is: PENDING (no check has run yet, so the result is empty), IN_PROGRESS (some enabled checks haven't produced results yet), or DONE. For a newly added site, query again later until the status is DONE.

Mutations

createSite

Adds a new domain to monitor.

mutation {
  createSite(
    domain: "acme.io"
    features: [MONITOR_WHOIS, MONITOR_SSL, MONITOR_DNS, LINK_CRAWLER]
    notification: { all: true }
  ) {
    id
    domain
    features
  }
}

Parameters

NameTypeDescription
domainString!The domain to start monitoring.
features[SiteFeatureTypes!]Product areas to enable.
notificationSiteNotificationConfigInputNotification settings — { all: Boolean! = true }.
tags[String!]Tag names to attach. Tags that don't exist yet are created.
folderIdIDID of the folder to place the site in.

Response: the created Site.

Limits: creation fails once your workspace has reached its plan's site limit, or once you have created that many sites in one day (UTC). Deleted sites still count toward that day's total.

updateSite

Updates a site's enabled features, notification settings, tags and/or folder. Passing features or tags replaces the full set. Turning a feature off also deletes that feature's incidents for the site.

Parameters

NameTypeDescription
domainString!The site's domain.
features[SiteFeatureTypes!]Product areas to enable.
notificationSiteNotificationConfigInputNotification settings — { all: Boolean! = true }.
tags[String!]Tag names to attach, replacing the current set. Tags that don't exist yet are created.
folderIdIDID of the folder to place the site in. Pass null to remove it.

Response: the updated Site.

deleteSite

Stops monitoring a domain and removes its data.

mutation {
  deleteSite(domain: "acme.io") {
    affectedRecords
  }
}

Parameters

NameTypeDescription
domainString!The domain to stop monitoring.

Response: a DeleteResult — { affectedRecords: Int! }.

Certificates

findSiteCertificate

Unexpired certificates of a domain and its subdomains, taken from public Certificate Transparency logs. Filterable, but not paginated or sortable.

query {
  findSiteCertificate(domain: "acme.io") {
    items {
      commonName
      notBefore
      notAfter
      issuerName
    }
  }
}

Parameters

NameTypeDescription
domainString!The monitored domain.
queryStringFilter expression — see Discovering Filterable Fields.

Response: a SiteCertificateList — items: [SiteCertificateRecord!]!:

FieldTypeDescription
idID!Unique identifier for this certificate record.
notAfterString!ISO 8601 expiration date of the certificate.
notBeforeString!ISO 8601 issuance date of the certificate.
issuerNameString!Name of the certificate issuer.
issuerX509NameStructured issuer distinguished name.
commonNameStringThe certificate's common name (CN).
identityName[String!]!Subject Alternative Names (SANs) covered by this certificate.
serialNumberString!The certificate's serial number.
createTimeString!ISO 8601 timestamp when the certificate was first logged in Certificate Transparency.
isPrecertBoolean!Whether this is a precertificate (Certificate Transparency).

getSiteCertificateIdentities

Subdomains named on the domain's certificates. Empty when SSL monitoring is off for the site.

query {
  getSiteCertificateIdentities(domain: "acme.io")
}

Parameters

NameTypeDescription
domainString!The monitored domain.

Response: [String!]!.

Errors: see Error Codes: Certificates.

Sitemap

findSiteSitemap

Paginated, filterable list of sitemap files discovered for a domain.

query {
  findSiteSitemap(domain: "acme.io", limit: 25) {
    items {
      url
      type
      status
      linkCount
    }
  }
}

Parameters

NameTypeDescription
domainString!The monitored domain.
queryStringFilter expression — see Discovering Filterable Fields.
pageIntPage number, defaults to 1.
limitIntPage size, defaults to 10, capped at 100.
sort[Sort!]Sort order, defaults to newest first.

Response: a SiteSitemapFileList — items: [SiteSitemapFile!]!:

FieldTypeDescription
idID!Unique identifier for this sitemap file.
urlString!URL of the sitemap file.
typeSitemapFileTypeThe sitemap file's type.
parentUrlStringURL of the parent sitemap index, if this file was referenced from one.
finalUrlStringURL the sitemap file was actually fetched from, after redirects.
formatSitemapFormatThe sitemap file's format.
statusCrawlStatusCrawl status for this file.
linkCountIntNumber of URL entries found in this sitemap file.
pageHttpResponseRaw HTTP response info from fetching the sitemap file.
errorSiteSitemapEntryErrorSet if this file failed to fetch/parse, was rejected as out-of-scope, or could not be fully processed — can be set alongside a CRAWL_COMPLETE status. Shape: { code: SitemapErrorCode!, message: String!, payload: [KeyValue!] }.
checkTimeStringISO 8601 timestamp of the last check attempt, successful or not.
syncTimeStringISO 8601 timestamp of the last successful check, whether or not anything changed.
createTime / updateTimeString! / StringISO 8601 timestamps for creation / last update.

Paginated, filterable list of a domain's sitemap files, each with all of its URL entries. Paging is by file, so limit counts files, not URLs.

query {
  findSiteSitemapLink(domain: "acme.io", limit: 25) {
    items {
      sitemapUrl
      linkCount
    }
  }
}

Parameters

NameTypeDescription
domainString!The monitored domain.
queryStringFilter expression — see Discovering Filterable Fields.
pageIntPage number, defaults to 1.
limitIntPage size, defaults to 10, capped at 100.
sort[Sort!]Sort order, defaults to newest first.

Response: a SiteSitemapLinkList — items: [SiteSitemapLink!]!:

FieldTypeDescription
idID!Unique identifier for this sitemap file's link entry.
sitemapUrlString!URL of the sitemap file this entry came from.
linkCountInt!Number of URL entries in this sitemap file.
links[SiteSitemapUrlEntry!]!The individual URL entries — see below.

SiteSitemapUrlEntry

FieldTypeDescription
urlString!The URL listed in the sitemap.
lastmodStringThe entry's declared lastmod value.
changefreqStringThe entry's declared changefreq value.
priorityFloatThe entry's declared priority value.
errorSiteSitemapEntryErrorSet if this entry falls outside the site's sitemap scope. Shape: { code: SitemapErrorCode!, message: String!, payload: [KeyValue!] }.

Errors: see Error Codes: Sitemap.

Paginated, filterable list of crawled links. The query must include a domain condition, e.g. domain = acme.io.

query {
  findSiteLink(query: "domain = acme.io AND status = CRAWL_COMPLETE", limit: 25) {
    items {
      url
      status
      mainPage
    }
  }
}

Parameters

NameTypeDescription
queryStringFilter expression — must include a domain condition. See Discovering Filterable Fields.
pageIntPage number, defaults to 1.
limitIntPage size, defaults to 10, capped at 100.
sort[Sort!]Sort order, defaults to newest first.

Response: a SiteLinkList — items: [SiteLink!]!:

FieldTypeDescription
idID!Unique identifier for this crawled link.
urlString!The crawled URL.
mainPageBoolean!Whether this is the site's main page.
statusSiteLinkStatus!Crawl status for this link.
severityInt!Numeric severity for sorting and the SEVERITY filter — higher means more urgent.
pageSiteLinkPageThe fetched page's response data, if the crawl succeeded.
crawlTimeStringISO 8601 timestamp of the last crawl attempt, if any.
links[SiteSubLink!]Links found on this page, if it was crawled.
errorSiteLinkErrorSet if the crawl couldn't complete.
systemTags[SiteLinkSystemTag!]!System-assigned status tags, matching what siteLinkSummary groups by.
createTime / updateTimeString! / StringISO 8601 timestamps for creation / when the page was last detected as changed. updateTime is null until the first change.

Look up a single crawled link by its exact URL.

query {
  getSiteLink(domain: "acme.io", url: "https://acme.io/pricing") {
    url
    status
    page {
      statusCode
    }
  }
}

Parameters

NameTypeDescription
domainString!The site's domain.
urlString!The crawled link's exact URL.

Response: a SiteLink (see findSiteLink above), or null if the link isn't found, or is outside your key's scope or plan limit.

siteLinkSummary

Counts of crawled links grouped by system tag (OK, REDIRECT, NOT_FOUND, etc.).

query {
  siteLinkSummary(query: "domain = acme.io") {
    total
    items {
      tag
      count
    }
  }
}

Parameters

NameTypeDescription
queryStringFilter expression — must include a domain condition. See Discovering Filterable Fields.

Response: a SiteLinkSummary:

FieldTypeDescription
totalInt!Total number of matching links across all tags.
items[SiteLinkSummaryItem!]!Per-tag counts — each item is { tag: SiteLinkSystemTag!, count: Int!, hasMore: Boolean! }. When hasMore is true, your plan's link limit capped the count, so more links with that tag exist than count shows.

Paginated list of crawled links pointing to a given URL.

query {
  siteLinkBacklinks(
    url: "https://acme.io/pricing"
    query: "domain = acme.io"
    limit: 25
  ) {
    items {
      url
      status
    }
  }
}

Parameters

NameTypeDescription
urlString!The target URL to find backlinks for.
queryStringFilter expression — must include a domain condition. See Discovering Filterable Fields.
pageIntPage number, defaults to 1.
limitIntPage size, defaults to 10, capped at 100.
sort[Sort!]Sort order, defaults to newest first.

Response: a SiteLinkList — same shape as findSiteLink above.

Errors: see Error Codes: Links.

On this page