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
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for the site. |
userId | ID! | ID of the user who added the site. |
domain | String! | The monitored domain. |
rootDomain | String! | The registrable root domain — e.g. acme.io for a site added as www.acme.io. |
isFavorite | Boolean! | Whether the site is marked as a favorite. |
tags | [String!] | Names of the workspace tags attached to the site — see Tags & Folders. |
folderId | ID | ID of the folder the site is placed in, if any — see Tags & Folders. |
features | [SiteFeatureTypes!]! | Product areas enabled for this site. |
notification | SiteNotificationConfig! | Notification settings for this site — { all: Boolean! }. |
ssl | SiteSSL | SSL/TLS monitoring data, populated once MONITOR_SSL has run. |
certificate | SiteCertificate | Latest certificate check data, populated once MONITOR_SSL has run. |
whois | SiteWhois | WHOIS/domain registration data, populated once MONITOR_WHOIS has run. |
dns | SiteDNS | DNS monitoring data, populated once MONITOR_DNS has run. |
mainPage | SiteMainPage | Main page data from the latest check. |
robotsTxt | SiteRobotsTxt | robots.txt data from the latest check. |
sitemap | SiteSitemap | Sitemap discovery data, populated once SITEMAP_CRAWLER has run. |
link | SiteLinkStats | Link crawler summary stats, present when LINK_CRAWLER is enabled. |
attachments | [SiteAttachment!] | Screenshots and favicons captured for the site. |
createTime / updateTime | String! / String | ISO 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:
| Field | Type | Description |
|---|---|---|
createTime / updateTime | String! / String | ISO 8601 timestamps for creation / last update. |
checkTime | String | ISO 8601 timestamp of the last check attempt, successful or not. |
syncTime | String | ISO 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:
| Field | Type | Description |
|---|---|---|
payload | SiteSSLPayload | |
error | SiteSslError | Set if the SSL check itself failed. |
SiteCertificate
Adds to the common shape above:
| Field | Type | Description |
|---|---|---|
payload | [SiteCertificateRecord!] | Same shape as findSiteCertificate's response items above. |
error | SiteCertificateError | Set if the certificate check itself failed. |
SiteWhois
Adds to the common shape above:
| Field | Type | Description |
|---|---|---|
payload | SiteWhoisPayload | |
error | SiteWhoisError | Set if the WHOIS lookup itself failed. |
SiteDNS
Adds to the common shape above:
| Field | Type | Description |
|---|---|---|
payload | SiteDnsPayload | See below. |
error | SiteDnsError | Set if the DNS lookup itself failed. |
SiteDnsPayload
| Field | Type | Description |
|---|---|---|
records | [SiteDnsRecord!] | Raw DNS records — { key: String!, values: [String!]!, ttl: Int! }. |
spf | SiteDnsSpf | SPF record — { payload: [KeyValues!], error: SiteDnsRecordError }. |
dmarc | SiteDnsDmarc | DMARC 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. |
bimi | SiteDnsBimi | BIMI record — { payload: SiteDnsBimiPayload, error: SiteDnsRecordError }. |
tlsRpt | SiteDnsTlsRpt | TLS-RPT record — { payload: SiteDnsTlsRptPayload, error: SiteDnsRecordError }. |
mtaSts | SiteDnsMtaSts | MTA-STS record — { payload: SiteDnsMtaStsPayload, error: SiteDnsRecordError }. |
ptr | [KeyValues!] | PTR (reverse DNS) records. |
dnssec | DnsSecStatus | SECURE, BOGUS, INSECURE, or INDETERMINATE. |
IPv4 / IPv6 | Boolean | Whether the domain resolves over each protocol. |
source | String! | 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:
| Field | Type | Description |
|---|---|---|
payload | SiteRobotsTxtPayload! | 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:
| Type | Fields | Description |
|---|---|---|
SiteRobotsTxtValid | content: String!, messages: [SiteRobotsTxtMessage!]! | robots.txt was found and parsed without issues. |
SiteRobotsTxtInvalid | content: String, messages: [SiteRobotsTxtMessage!]! | robots.txt was found but has parsing issues — messages explains what. |
SiteRobotsTxtError | code: 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.
| Field | Type | Description |
|---|---|---|
status | SitemapStatus! | PROCESSING, COMPLETE, or FAILED. |
error | SiteSitemapDiscoveryError | Set 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. |
summary | SiteSitemapSummary | File, URL entry and error counts from the last completed sitemap crawl. |
SiteSitemapSummary
| Field | Type | Description |
|---|---|---|
fileCount | Int! | Number of sitemap files found. |
linkCount | Int! | 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.
| Field | Type | Description |
|---|---|---|
url | String | The final URL crawled, after redirects. |
status | SiteLinkStatus | Crawl status. |
crawlTime | String | ISO 8601 timestamp of the crawl. |
page | MainWebpage | The fetched page's response data — see below. |
httpSupport / httpsSupport | Boolean | Whether the site responds over each protocol. |
httpsRedirection | Boolean | Whether HTTP requests redirect to HTTPS. |
http2Support / http3Support | Boolean | Whether the site negotiates each HTTP version. |
markdownSupport | Boolean | Whether 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. |
error | SiteMainPageError | Set if the crawl itself failed — { code: MainPageErrorCode!, message: String!, payload: [KeyValue!] }. |
MainWebpage
Same fields as Webpage, plus:
| Field | Type | Description |
|---|---|---|
timer | WebpageTimer | Request timing breakdown, in seconds — { dnsResolution, connect, appConnect, preTransfer, startTransfer, total: Float! }. |
browser | BrowserPayload | Headless-browser rendering data, if a browser-rendered check was performed — see below. |
BrowserPayload
| Field | Type | Description |
|---|---|---|
viewport | BrowserViewport! | { width: Int!, height: Int!, devicePixelRatio: Float! }. |
pageHeight | Int! | 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).
| Field | Type | Description |
|---|---|---|
count | Int! | Number of links found for this site. If it is greater than limit, the site has more links than your plan tracks. |
limit | Int! | 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.
| Field | Type | Description |
|---|---|---|
createTime | String! | ISO 8601 timestamp when this attachment was captured. |
type | SiteAttachmentType! | SCREENSHOT or FAVICON. |
url | String! | 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
| Name | Type | Description |
|---|---|---|
domain | String! | 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
| Name | Type | Description |
|---|---|---|
query | String | Filter expression — see Discovering Filterable Fields. |
page | Int | Page number, defaults to 1. |
limit | Int | Page 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
| Name | Type | Description |
|---|---|---|
domain | String! | A domain already monitored in your workspace. |
Response: an AnalyzeResult — see Types: Analysis for the nested AnalyzeSummary/SubAnalyzeResult shapes.
| Field | Type |
|---|---|
summary | AnalyzeSummary! |
header | SubAnalyzeResult! |
common | SubAnalyzeResult! |
whois | SubAnalyzeResult! |
dns | SubAnalyzeResult! |
ssl | SubAnalyzeResult! |
status | SiteAnalyzeStatus! |
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
| Name | Type | Description |
|---|---|---|
domain | String! | The domain to start monitoring. |
features | [SiteFeatureTypes!] | Product areas to enable. |
notification | SiteNotificationConfigInput | Notification settings — { all: Boolean! = true }. |
tags | [String!] | Tag names to attach. Tags that don't exist yet are created. |
folderId | ID | ID 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
| Name | Type | Description |
|---|---|---|
domain | String! | The site's domain. |
features | [SiteFeatureTypes!] | Product areas to enable. |
notification | SiteNotificationConfigInput | Notification settings — { all: Boolean! = true }. |
tags | [String!] | Tag names to attach, replacing the current set. Tags that don't exist yet are created. |
folderId | ID | ID 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
| Name | Type | Description |
|---|---|---|
domain | String! | 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
| Name | Type | Description |
|---|---|---|
domain | String! | The monitored domain. |
query | String | Filter expression — see Discovering Filterable Fields. |
Response: a SiteCertificateList — items: [SiteCertificateRecord!]!:
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for this certificate record. |
notAfter | String! | ISO 8601 expiration date of the certificate. |
notBefore | String! | ISO 8601 issuance date of the certificate. |
issuerName | String! | Name of the certificate issuer. |
issuer | X509Name | Structured issuer distinguished name. |
commonName | String | The certificate's common name (CN). |
identityName | [String!]! | Subject Alternative Names (SANs) covered by this certificate. |
serialNumber | String! | The certificate's serial number. |
createTime | String! | ISO 8601 timestamp when the certificate was first logged in Certificate Transparency. |
isPrecert | Boolean! | 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
| Name | Type | Description |
|---|---|---|
domain | String! | 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
| Name | Type | Description |
|---|---|---|
domain | String! | The monitored domain. |
query | String | Filter expression — see Discovering Filterable Fields. |
page | Int | Page number, defaults to 1. |
limit | Int | Page size, defaults to 10, capped at 100. |
sort | [Sort!] | Sort order, defaults to newest first. |
Response: a SiteSitemapFileList — items: [SiteSitemapFile!]!:
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for this sitemap file. |
url | String! | URL of the sitemap file. |
type | SitemapFileType | The sitemap file's type. |
parentUrl | String | URL of the parent sitemap index, if this file was referenced from one. |
finalUrl | String | URL the sitemap file was actually fetched from, after redirects. |
format | SitemapFormat | The sitemap file's format. |
status | CrawlStatus | Crawl status for this file. |
linkCount | Int | Number of URL entries found in this sitemap file. |
page | HttpResponse | Raw HTTP response info from fetching the sitemap file. |
error | SiteSitemapEntryError | Set 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!] }. |
checkTime | String | ISO 8601 timestamp of the last check attempt, successful or not. |
syncTime | String | ISO 8601 timestamp of the last successful check, whether or not anything changed. |
createTime / updateTime | String! / String | ISO 8601 timestamps for creation / last update. |
findSiteSitemapLink
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
| Name | Type | Description |
|---|---|---|
domain | String! | The monitored domain. |
query | String | Filter expression — see Discovering Filterable Fields. |
page | Int | Page number, defaults to 1. |
limit | Int | Page size, defaults to 10, capped at 100. |
sort | [Sort!] | Sort order, defaults to newest first. |
Response: a SiteSitemapLinkList — items: [SiteSitemapLink!]!:
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for this sitemap file's link entry. |
sitemapUrl | String! | URL of the sitemap file this entry came from. |
linkCount | Int! | Number of URL entries in this sitemap file. |
links | [SiteSitemapUrlEntry!]! | The individual URL entries — see below. |
SiteSitemapUrlEntry
| Field | Type | Description |
|---|---|---|
url | String! | The URL listed in the sitemap. |
lastmod | String | The entry's declared lastmod value. |
changefreq | String | The entry's declared changefreq value. |
priority | Float | The entry's declared priority value. |
error | SiteSitemapEntryError | Set if this entry falls outside the site's sitemap scope. Shape: { code: SitemapErrorCode!, message: String!, payload: [KeyValue!] }. |
Errors: see Error Codes: Sitemap.
Links
findSiteLink
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
| Name | Type | Description |
|---|---|---|
query | String | Filter expression — must include a domain condition. See Discovering Filterable Fields. |
page | Int | Page number, defaults to 1. |
limit | Int | Page size, defaults to 10, capped at 100. |
sort | [Sort!] | Sort order, defaults to newest first. |
Response: a SiteLinkList — items: [SiteLink!]!:
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier for this crawled link. |
url | String! | The crawled URL. |
mainPage | Boolean! | Whether this is the site's main page. |
status | SiteLinkStatus! | Crawl status for this link. |
severity | Int! | Numeric severity for sorting and the SEVERITY filter — higher means more urgent. |
page | SiteLinkPage | The fetched page's response data, if the crawl succeeded. |
crawlTime | String | ISO 8601 timestamp of the last crawl attempt, if any. |
links | [SiteSubLink!] | Links found on this page, if it was crawled. |
error | SiteLinkError | Set if the crawl couldn't complete. |
systemTags | [SiteLinkSystemTag!]! | System-assigned status tags, matching what siteLinkSummary groups by. |
createTime / updateTime | String! / String | ISO 8601 timestamps for creation / when the page was last detected as changed. updateTime is null until the first change. |
getSiteLink
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
| Name | Type | Description |
|---|---|---|
domain | String! | The site's domain. |
url | String! | 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
| Name | Type | Description |
|---|---|---|
query | String | Filter expression — must include a domain condition. See Discovering Filterable Fields. |
Response: a SiteLinkSummary:
| Field | Type | Description |
|---|---|---|
total | Int! | 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. |
siteLinkBacklinks
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
| Name | Type | Description |
|---|---|---|
url | String! | The target URL to find backlinks for. |
query | String | Filter expression — must include a domain condition. See Discovering Filterable Fields. |
page | Int | Page number, defaults to 1. |
limit | Int | Page 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.