By default the page’s markdown is compared. diff.text holds a unified diff, and diff.hunks has the same hunks as structured lines.Rendering noise never counts as a change: whitespace and line endings, invisible characters and non-breaking spaces, and the tracking, session and signature parameters in link URLs (utm_source, fbclid, jsessionid, signed CDN URLs). A page that loads but renders no text at all is reported as an error, not as every line removed.
A page is then changed only when a tracked field changes, and diff.fields says exactly which one: plans[0].price: "$19/mo" → "$24/mo". Pass json_schema instead of, or as well as, json_prompt to fix the shape. Use "modes": ["json", "markdown"] to get both diffs.The extraction runs again only when the page’s text changed. An unchanged page keeps its last extraction, so a model reading identical text a little differently is never a change, and costs nothing. List items are matched by identity (an id, url, name or title field), so one job inserted at the top of a list is one added field, not every job shifted.
Most false alarms come from page furniture: a “last updated” date, a rotating testimonial, a visitor counter. These change_tracking options keep them quiet:
Option
What it does
ignore_text
Up to 25 phrases. Lines that contain one are left out of the comparison. Plain text, case-insensitive, with * for anything: ["people are viewing", "viewed * times"].
ignore_dates
Masks dates, times and “3 minutes ago” before comparing.
ignore_order
Lines that only moved aren’t a change.
notify_on
Which kinds of change notify you: added, removed or changed lines or fields. For a crawl, that’s pages that appear or disappear. ["added"] tells you about new job posts, not filled ones.
only_new_content
Notify only when a change brings text the page hasn’t shown recently, so content that cycles (a carousel, A/B variants) stays quiet.
ignore_text, ignore_dates and ignore_order change only what’s compared. A change still shows the page as it reads.notify_on and only_new_content decide whether a change notifies you. The page is still recorded as changed, and diff.alert says why it was held back.Changing any of these options re-baselines the target’s pages silently, instead of reporting them all as changed.
You can also leave parts of the page out with scrape_options.exclude_selectors, or switch to json mode and track only what you care about. Images are left out of the comparison by default, because their URLs change with every deploy.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Prefetch API","colors":{"primary":"#8A5A00","light":"#F7B00A","dark":"#F7B00A"},"logo":{"light":"https://mintcdn.com/prefetch/0cLjeQZN2Dy6gN5Q/logo/light.svg?fit=max\u0026auto=format\u0026n=0cLjeQZN2Dy6gN5Q\u0026q=85\u0026s=7b9ea0ec7c23b929ff607e56c0de9713","dark":"https://mintcdn.com/prefetch/0cLjeQZN2Dy6gN5Q/logo/dark.svg?fit=max\u0026auto=format\u0026n=0cLjeQZN2Dy6gN5Q\u0026q=85\u0026s=e97e8b6432d524163f934bd09b638763"},"favicon":"https://mintcdn.com/prefetch/qKlLmXxc4XUEOZI9/images/favicon.svg?fit=max\u0026auto=format\u0026n=qKlLmXxc4XUEOZI9\u0026q=85\u0026s=68c45014cec0f875b327e5b42e450b3c","appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#FCFBF6","dark":"#1A0618"}},"navbar":{"links":[{"href":"https://prefetch.io/#pricing-section","label":"Pricing"},{"href":"https://prefetch.betteruptime.com/","label":"Status"},{"href":"mailto:[email protected]","label":"Support"},{"href":"https://prefetch.io/dashboard","label":"Dashboard"}],"primary":{"type":"button","label":"Get API key","href":"https://prefetch.io/account"}},"footer":{"links":[{"header":"Product","items":[{"label":"Website","href":"https://prefetch.io"},{"label":"Brand catalog","href":"https://prefetch.io/brands"},{"label":"Pricing","href":"https://prefetch.io/"},{"label":"Status","href":"https://prefetch.betteruptime.com/"},{"label":"Dashboard","href":"https://prefetch.io/dashboard"}]},{"header":"Docs","items":[{"label":"Quickstart","href":"/quickstart"},{"label":"Recipes","href":"/recipes/overview"},{"label":"Compare","href":"/compare/overview"},{"label":"API reference","href":"/api-reference/introduction"},{"label":"MCP server","href":"/mcp/overview"},{"label":"Changelog","href":"/changelog"}]},{"header":"Company","items":[{"label":"Book a demo","href":"https://cal.com/nestoras.design"},{"label":"Contact","href":"mailto:[email protected]"},{"label":"Security","href":"/concepts/security"},{"label":"Privacy","href":"https://prefetch.io/privacy"},{"label":"Terms","href":"https://prefetch.io/terms"}]}]},"fonts":{"heading":{"family":"Space Grotesk"},"body":{"family":"Inter"}},"styling":{"codeblocks":{"theme":"css-variables"},"latex":true},"integrations":{"ga4":{"measurementId":"G-GVKTFNYJ7B"}},"contextual":{"options":["copy","view","claude","chatgpt","perplexity","cursor","vscode"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/prefetch/0cLjeQZN2Dy6gN5Q/images/og-background.png?fit=max\u0026auto=format\u0026n=0cLjeQZN2Dy6gN5Q\u0026q=85\u0026s=cff58baad899de3384c86485eb291dad","fonts":{"family":"Space Grotesk"}},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"prefetch","hasAudioNarration":false,"actualSubdomain":"prefetch","customDomains":["docs.prefetch.io"],"gitSource":{"type":"github","owner":"trelobarbouni18","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aebcbd77241693b4d6de432","collectionId":"6246a8b5-836c-4ee7-bd6f-75cf2f5d1bff","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aebcbd77241693b4d6de432"},"entitlements":{},"buildId":"6aebd7f575e8c030b49a1953","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":38},{"language":"default","tag":"Docs","count":37},{"language":"default","tag":"Monitors","count":17},{"language":"default","tag":"Recipes","count":14},{"language":"default","tag":"Company data","count":13},{"language":"default","tag":"Integrations","count":12},{"language":"default","tag":"Web data","count":10},{"language":"default","tag":"Batches","count":8},{"language":"default","tag":"Jobs and monitoring","count":8},{"language":"default","tag":"Platform","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"custom.css","href":"/_mintlify/custom/prefetch/d2542fa30758caf7/custom.css"}],"page":{"pagePath":"monitors/change-detection","slug":"/monitors/change-detection","pageMetadata":{"title":"Detecting changes","description":"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.","icon":"/icons/git-merge.svg","href":"/monitors/change-detection"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Each page in each check gets one status:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`same`})}),_jsx(_components.td,{children:`Fetched again, and nothing changed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`new`})}),_jsx(_components.td,{children:`Seen for the first time: on the first check, or a page that appeared since.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`changed`})}),_jsxs(_components.td,{children:[`Fetched again, and the content differs. The page carries a `,_jsx(_components.code,{children:`diff`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`removed`})}),_jsx(_components.td,{children:`A page the monitor knew answered 404 or 410, or a crawl that ran to completion no longer finds it. Reported once.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.td,{children:`Couldn’t be checked. The last good snapshot is kept, so the next good check compares against it.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`text-mode`,children:`Text mode`}),`\n`,_jsxs(_components.p,{children:[`By default the page’s `,_jsx(_components.strong,{children:`markdown`}),` is compared. `,_jsx(_components.code,{children:`diff.text`}),` holds a unified diff, and `,_jsx(_components.code,{children:`diff.hunks`}),` has the same hunks as structured lines.`]}),`\n`,_jsxs(_components.p,{children:[`Rendering noise never counts as a change: whitespace and line endings, invisible characters and non-breaking spaces, and the tracking, session and signature parameters in link URLs (`,_jsx(_components.code,{children:`utm_source`}),`, `,_jsx(_components.code,{children:`fbclid`}),`, `,_jsx(_components.code,{children:`jsessionid`}),`, signed CDN URLs). A page that loads but renders no text at all is reported as an `,_jsx(_components.code,{children:`error`}),`, not as every line removed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`json-mode`,children:`JSON mode`}),`\n`,_jsxs(_components.p,{children:[`To watch specific facts instead of the whole text, use `,_jsx(_components.strong,{children:`json`}),` mode. Describe the fields, and each check extracts them and compares them one by one:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes css-variables css-variables`,style:{backgroundColor:`var(--mint-background)`,\"--shiki-dark-bg\":`var(--mint-background)`,color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"scrape\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"urls\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` [`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`\"https://example.com/pricing\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`]`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"change_tracking\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` { `}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:`\"modes\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` [`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:`\"json\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`]`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`,`}),_jsx(_components.span,{style:{color:`var(--mint-token-keyword, #bd2864)`,\"--shiki-dark\":`var(--mint-token-keyword, #bd2864)`},children:` \"json_prompt\"`}),_jsx(_components.span,{style:{color:`var(--mint-token-punctuation, #171717)`,\"--shiki-dark\":`var(--mint-token-punctuation, #171717)`},children:`:`}),_jsx(_components.span,{style:{color:`var(--mint-token-string-expression, #297a3a)`,\"--shiki-dark\":`var(--mint-token-string-expression, #297a3a)`},children:` \"Each plan: name, monthly price, headline features\"`}),_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`var(--mint-foreground)`,\"--shiki-dark\":`var(--mint-foreground)`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A page is then `,_jsx(_components.code,{children:`changed`}),` only when a tracked field changes, and `,_jsx(_components.code,{children:`diff.fields`}),` says exactly which one: `,_jsx(_components.code,{children:`plans[0].price: \"$19/mo\" → \"$24/mo\"`}),`. Pass `,_jsx(_components.code,{children:`json_schema`}),` instead of, or as well as, `,_jsx(_components.code,{children:`json_prompt`}),` to fix the shape. Use `,_jsx(_components.code,{children:`\"modes\": [\"json\", \"markdown\"]`}),` to get both diffs.`]}),`\n`,_jsxs(_components.p,{children:[`The extraction runs again only when the page’s text changed. An unchanged page keeps its last extraction, so a model reading identical text a little differently is never a change, and costs nothing. List items are matched by identity (an `,_jsx(_components.code,{children:`id`}),`, `,_jsx(_components.code,{children:`url`}),`, `,_jsx(_components.code,{children:`name`}),` or `,_jsx(_components.code,{children:`title`}),` field), so one job inserted at the top of a list is one `,_jsx(_components.code,{children:`added`}),` field, not every job shifted.`]}),`\n`,_jsx(Heading,{level:`2`,id:`cutting-noise`,children:`Cutting noise`}),`\n`,_jsxs(_components.p,{children:[`Most false alarms come from page furniture: a “last updated” date, a rotating testimonial, a visitor counter. These `,_jsx(_components.code,{children:`change_tracking`}),` options keep them quiet:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Option`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ignore_text`})}),_jsxs(_components.td,{children:[`Up to 25 phrases. Lines that contain one are left out of the comparison. Plain text, case-insensitive, with `,_jsx(_components.code,{children:`*`}),` for anything: `,_jsx(_components.code,{children:`[\"people are viewing\", \"viewed * times\"]`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ignore_dates`})}),_jsx(_components.td,{children:`Masks dates, times and “3 minutes ago” before comparing.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ignore_order`})}),_jsx(_components.td,{children:`Lines that only moved aren’t a change.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`notify_on`})}),_jsxs(_components.td,{children:[`Which kinds of change notify you: `,_jsx(_components.code,{children:`added`}),`, `,_jsx(_components.code,{children:`removed`}),` or `,_jsx(_components.code,{children:`changed`}),` lines or fields. For a crawl, that’s pages that appear or disappear. `,_jsx(_components.code,{children:`[\"added\"]`}),` tells you about new job posts, not filled ones.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`only_new_content`})}),_jsx(_components.td,{children:`Notify only when a change brings text the page hasn’t shown recently, so content that cycles (a carousel, A/B variants) stays quiet.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ignore_text`}),`, `,_jsx(_components.code,{children:`ignore_dates`}),` and `,_jsx(_components.code,{children:`ignore_order`}),` change only what’s compared. A change still shows the page as it reads.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`notify_on`}),` and `,_jsx(_components.code,{children:`only_new_content`}),` decide whether a change notifies you. The page is still recorded as `,_jsx(_components.code,{children:`changed`}),`, and `,_jsx(_components.code,{children:`diff.alert`}),` says why it was held back.`]}),`\n`,_jsx(_components.p,{children:`Changing any of these options re-baselines the target’s pages silently, instead of reporting them all as changed.`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`You can also leave parts of the page out with `,_jsx(_components.code,{children:`scrape_options.exclude_selectors`}),`, or switch to json mode and track only what you care about. Images are left out of the comparison by default, because their URLs change with every deploy.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`reading-a-change`,children:`Reading a change`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/api-reference/endpoint/monitor-check`,children:_jsx(_components.code,{children:`GET /monitor/{id}/checks/{checkId}?status=changed`})}),` lists the pages that changed in one check, with their diffs, the judge’s verdict and, in json mode, the full current extraction.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":"css-variables"},"config":{},"pageMetadata":{"title":"Detecting changes","description":"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.","icon":"/icons/git-merge.svg","href":"/monitors/change-detection"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Text mode","slug":"text-mode","depth":2,"children":[]},{"title":"JSON mode","slug":"json-mode","depth":2,"children":[]},{"title":"Cutting noise","slug":"cutting-noise","depth":2,"children":[]},{"title":"Reading a change","slug":"reading-a-change","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"prefetch","siteName":"Prefetch API","title":"Detecting changes - Prefetch API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T00:20:47.848Z","originalFileLocation":"monitors/change-detection.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Prefetch API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Detecting changes - Prefetch API\">\u003cmeta data-mint-head property=\"og:description\" content=\"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Prefetch API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.prefetch.io/monitors/change-detection\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://prefetch.mintlify.site/_mintlify/api/og/v2?division=Monitors\u0026amp;title=Detecting+changes\u0026amp;description=How+a+monitor+decides+a+page+changed%3A+text+diffs%2C+tracked+JSON+fields%2C+and+the+options+that+keep+noise+out.\u0026amp;theme=628be342ea52ab520abed57d\u0026amp;signature=ef76ad3252a651558e74a0c0278ba96438d319ab9dccd1f69a07bef67a62dabb\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Detecting changes - Prefetch API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://prefetch.mintlify.site/_mintlify/api/og/v2?division=Monitors\u0026amp;title=Detecting+changes\u0026amp;description=How+a+monitor+decides+a+page+changed%3A+text+diffs%2C+tracked+JSON+fields%2C+and+the+options+that+keep+noise+out.\u0026amp;theme=628be342ea52ab520abed57d\u0026amp;signature=ef76ad3252a651558e74a0c0278ba96438d319ab9dccd1f69a07bef67a62dabb\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/prefetch/LfH_u0wIgIMJj9SU/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Prefetch API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8A5A00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.prefetch.io/monitors/change-detection\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/monitors/change-detection.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.prefetch.io/#organization\",\"name\":\"Prefetch API\",\"url\":\"https://docs.prefetch.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/prefetch/0cLjeQZN2Dy6gN5Q/logo/light.svg?fit=max\u0026auto=format\u0026n=0cLjeQZN2Dy6gN5Q\u0026q=85\u0026s=7b9ea0ec7c23b929ff607e56c0de9713\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.prefetch.io#website\",\"name\":\"Prefetch API\",\"url\":\"https://docs.prefetch.io\",\"publisher\":{\"@id\":\"https://docs.prefetch.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.prefetch.io/monitors/change-detection#webpage\",\"url\":\"https://docs.prefetch.io/monitors/change-detection\",\"name\":\"Detecting changes\",\"description\":\"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\",\"dateModified\":\"2026-11-05T00:20:47.848Z\",\"isPartOf\":{\"@id\":\"https://docs.prefetch.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.prefetch.io/monitors/change-detection#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.prefetch.io/monitors/change-detection#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Jobs and monitoring\",\"item\":\"https://docs.prefetch.io/jobs/batches\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Monitors\",\"item\":\"https://docs.prefetch.io/monitors/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Detecting changes\",\"item\":\"https://docs.prefetch.io/monitors/change-detection\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.prefetch.io/monitors/change-detection#article\",\"headline\":\"Detecting changes\",\"name\":\"Detecting changes\",\"description\":\"How a monitor decides a page changed: text diffs, tracked JSON fields, and the options that keep noise out.\",\"url\":\"https://docs.prefetch.io/monitors/change-detection\",\"mainEntityOfPage\":{\"@id\":\"https://docs.prefetch.io/monitors/change-detection#webpage\"},\"dateModified\":\"2026-11-05T00:20:47.848Z\",\"publisher\":{\"@id\":\"https://docs.prefetch.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.prefetch.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Prefetch API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Prefetch API","nav":{"global":{},"tabs":[{"tab":"Docs","groups":[{"group":"Get started","pages":[{"title":"Prefetch API","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/home.svg","sidebarTitle":"Introduction","href":""},{"title":"Quickstart","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/zap.svg","href":"/quickstart"},{"title":"Agent quickstart","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/robot.svg","href":"/agent-quickstart"}]},{"group":"Agents and MCP","pages":[{"title":"MCP server","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/plug.svg","href":"/mcp/overview"},{"title":"MCP tools","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/tools.svg","href":"/mcp/tools"}]},{"group":"Company data","pages":[{"title":"Resolve a name","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/directions.svg","href":"/company-data/resolve"},{"title":"Enrich a company","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/blocks.svg","href":"/company-data/enrich"},{"title":"Brand","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/colors-swatch.svg","href":"/company-data/brand"},{"title":"Company","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/university.svg","href":"/company-data/company"},{"title":"Classify","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/label.svg","href":"/company-data/classify"},{"title":"Styleguide","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/shapes.svg","href":"/company-data/styleguide"},{"title":"Logo CDN","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/image.svg","href":"/company-data/logo-cdn"},{"title":"Card transactions","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/receipt.svg","href":"/company-data/transaction"}]},{"group":"Web data","pages":[{"title":"Scrape","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/file-text.svg","href":"/web-data/scrape"},{"title":"Search","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/search.svg","href":"/web-data/search"},{"title":"Map a site","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/algorithm.svg","href":"/web-data/map"},{"title":"Crawl a site","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/bug.svg","href":"/web-data/crawl"},{"title":"Screenshots","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/camera.svg","href":"/web-data/screenshot"},{"title":"Answers","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/book-open.svg","href":"/web-data/answers"}]},{"group":"Jobs and monitoring","pages":[{"title":"Batches","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/files.svg","href":"/jobs/batches"},{"group":"Monitors","pages":[{"title":"Monitors","sidebarTitle":"Overview","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/bell.svg","href":"/monitors/overview"},{"title":"Targets","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/target.svg","href":"/monitors/targets"},{"title":"Schedules","description":"Set how often a monitor checks, as a plain phrase or five-field cron, in any timezone.","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/calendar.svg","href":"/monitors/schedules"},{"title":"Detecting changes","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/git-merge.svg","href":"/monitors/change-detection"},{"title":"Goals and judging","description":"Describe in one sentence what you want to hear about, and every change is judged against it before you're alerted.","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/goal.svg","href":"/monitors/goals"},{"title":"Alerts","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/mail.svg","href":"/monitors/alerts"},{"title":"Limits and credits","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/speed-fast.svg","href":"/monitors/limits"}]}]},{"group":"Platform","pages":[{"title":"Authentication","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/key.svg","href":"/concepts/authentication"},{"title":"Credits","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/coins.svg","href":"/concepts/credits"},{"title":"Rate limits","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/speed-fast.svg","href":"/concepts/rate-limits"},{"title":"Error handling","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/warning-diamond.svg","href":"/concepts/errors"},{"title":"Webhooks","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/send.svg","href":"/concepts/webhooks"},{"title":"Async jobs","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/hourglass.svg","href":"/concepts/async-jobs"},{"title":"Caching and freshness","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/reload.svg","href":"/concepts/caching"}]},{"group":"Going to production","pages":[{"title":"Production checklist","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/checkbox-on.svg","href":"/concepts/production-checklist"},{"title":"Troubleshooting","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/debug.svg","href":"/concepts/troubleshooting"},{"title":"Security and data handling","icon":"https://mintlify.s3.us-west-1.amazonaws.com/prefetch/icons/shield.svg","href":"/concepts/security"}]}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/recipes/overview"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Detecting changes - Prefetch API","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":[],"chunks":[]}