Target Site Terms Automation Clause Change Watcher avatar

Target Site Terms Automation Clause Change Watcher

Pricing

from $20.00 / 1,000 run starteds

Go to Apify Store
Target Site Terms Automation Clause Change Watcher

Target Site Terms Automation Clause Change Watcher

Watches the legal documents of the sites that you scrape and reports every change to the clauses that govern automated access, with the date on which the new clause binds. One record for each clause change, one for each document and one summary. HTTP only

Pricing

from $20.00 / 1,000 run starteds

Rating

0.0

(0)

Developer

kingii98

kingii98

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Watches the legal documents of the sites that your scrapers and your agents call, and reports every change to the clause that governs automated access, together with the date on which the new clause binds.

A general page change monitor gives you a raw page diff. This Actor gives you the clause. It keeps a text window around each term of an automation taxonomy, it compares only those windows against the stored baseline, and it reads the effective date or the binding date out of the changed text.

This Actor reports text changes. It gives no legal advice.

What the buyer gets

  • A weekly answer to one question: did a target site change the rule that governs my access?
  • The previous wording and the new wording, side by side, for each clause that moved.
  • The date on which the new clause binds, when the document states one.
  • A feasibility signal: the count and the ratio of documents that a plain HTTP client cannot read.

How it works

  1. One GET for each document. HTTP only: no browser, no proxy, no CAPTCHA service, no paid API, no external database and no language model.
  2. HTML to text normalisation. Scripts, style sheets, comments and white space are removed, so a new style sheet does not look like a new clause. Only the main region of the document is kept: the navigation, the header and the footer carry taxonomy words, for example a "Robot Access" menu entry, and a site edits them for reasons that have nothing to do with the terms.
  3. Clause segmentation. For each term of the taxonomy, the Actor keeps a text window of contextChars characters around each match.
  4. Comparison against the baseline that the previous run stored in a named key-value store.
  5. Date extraction from the changed window.

State: the baseline

A change is a difference against a stored version, so the Actor cannot report a change without state. The previous normalised text and the previous clause windows live in the key-value store named by stateStoreName, one record for each document URL.

The first run of a document creates the baseline and reports no change. This is correct, not a fault. Run the Actor a second time to get a comparison. Keep the same stateStoreName over every run of one watch list.

A baseline that was taken with another window size is not compared. The Actor writes a fresh baseline instead, so that a changed contextChars value does not produce false changes.

Input

Every field has a default, so a run with an empty input {} succeeds.

FieldTypeDefaultMeaning
documentsarraytwo public policy pages1 to 30 records, each with a label and a url
clauseTermsarray22 termsThe automation taxonomy. Maximum 50 terms
contextCharsinteger600Size of the text window around each matched term
reportUnchangedbooleanfalseAlso write one record for each clause window that is still there word for word
stateStoreNamestringtos-clause-baselinesName of the key-value store that holds the baselines
timeoutSecondsinteger20Timeout for one GET
maxResponseBytesinteger1000000Hard cap on the bytes read from one document
maxRedirectsinteger3Redirect hops. Every hop passes the public-address check
concurrencyinteger4Documents fetched at the same time
userAgentstringTosClauseWatcher/0.1 (+https://apify.com)Identifies this Actor in the logs of the watched site

The default taxonomy holds: automated means, automated, scrape, scraping, crawler, crawl, spider, bot, robot, robots.txt, data mining, text and data mining, harvest, AI agent, artificial intelligence, machine learning, LLM, large language model, rate limit, API key, resale, resell.

Example

{
"documents": [
{ "label": "Marketplace", "url": "https://example.com/legal/terms-of-use" },
{ "label": "Marketplace API", "url": "https://example.com/legal/developer-agreement" }
],
"clauseTerms": ["automated means", "scrape", "crawler", "bot", "AI agent", "LLM", "rate limit"],
"contextChars": 600
}

Output

The dataset holds three record types. Read them by recordType.

clause-change, one for each clause window that changed

FieldMeaning
siteLabel, documentUrlWhich document changed
clauseTermThe term of the taxonomy that the window is built around
changeClassadded, removed or reworded
previousWindowThe text window as the last run stored it. Empty for added
newWindowThe text window as this run read it. Empty for removed
dateText, dateIso, dateKindThe date near the change. dateKind is binding, effective, updated or mentioned
previousCapturedAt, detectedAtWhen the two versions were read

A window pair above a similarity threshold is one clause after a rewrite, so it is reported as reworded with both versions. Two windows that are not similar are reported as one removed and one added.

document, one for each document

fetchStatus (OK, BASELINE_CREATED, FETCH_FAILED, UNREADABLE or REFUSED), httpStatus, textHash (SHA-256 of the normalised text), changed, clauseChanges, clauseTermsPresent, contentBytes, truncated, error and checkedAt.

UNREADABLE means that the body holds no readable terms text. The site probably renders the document with JavaScript or blocks a plain HTTP client. Watch unreadableRatio in the summary: a high ratio means that the watch list is not feasible for an HTTP-only reader.

summary, one for each run

documentsRequested, documentsCompared, documentsChanged, documentsBaselined, documentsUnreadable, documentsFailed, clauseChanges, newAutomationClauses, clauseChangesWithDate, unreadableRatio, status and finishedAt.

status is CHANGES_FOUND, NO_CHANGE, BASELINE_CREATED or NO_DOCUMENT_READ.

clause-unchanged, only when reportUnchanged is true

The evidence that a clause window is still there word for word. Use it for an audit. It is not a clause change and it is never charged as one. The count is bounded for each document.

Runs never fail on a business verdict

A refused URL, a document that the HTTP-only fetch cannot read, and a run with zero clause changes are all results. They are written to the dataset and to the run status message, and the run ends SUCCEEDED. A run ends FAILED only when the input itself cannot be read.

Pricing: pay per event

EventUnitCharged
run-startedOne Actor runOnce for each run, after the input is validated
document-checkedOne legal document fetched, normalised and compared against the baselineOnce for each document that was read and compared. A document that could not be read is not charged
clause-change-reportedOne clause window that changed since the last runOnce for each clause-change record. A clause-unchanged record is not charged

A quiet week stays cheap, so you can keep the schedule. The change carries the higher price, because the change is the product.

Safety

  • Only HTTP and HTTPS URLs. Credentials in a URL are refused.
  • Loopback, private, link-local and reserved addresses are refused, and every redirect hop is checked again.
  • The read stops at maxResponseBytes. Input, concurrency, redirects and timeouts are bounded.
  • The Actor sends one GET for each document and it identifies itself with userAgent.

Development

uv sync
uv run pytest
uv run ruff check .