Skip to content
Compliance tools

Is there a cancellation button, and where does it lead?

Enter the start page of a subscription site. A real browser in the EU loads it, rejects the cookie banner, looks for controls labelled like a cancellation button, follows the most likely one and reports what it found. Nothing is clicked that submits anything.

Enter the public start page of a site that sells subscriptions or other continuing contracts to consumers.

This check opens a real browser on our servers and needs JavaScript in yours.

Observations, not verdicts. What you enter is processed for this result and written to a usage journal described in the privacy policy; nothing else is stored.

Note · Observations, not legal advice

The report lists what a browser found on the page: labels, destinations, form fields. Whether a site meets § 312k BGB is a legal question that depends on facts the page does not show, and this tool does not answer it.

What the scan does, in order

  1. Load the start page

    A fresh EU browser opens the URL, answers the consent banner with reject, and waits for the page to settle. A first screenshot is taken.

  2. Find candidates

    Every link and button whose accessible name matches the cancellation vocabulary is listed with its label, the phrase that matched, the destination it resolves to and whether that destination is on the same site.

  3. Follow the best candidate

    The strongest same-site candidate is followed by navigation, not by submitting anything. The page it leads to is recorded: its URL, the form fields present, and any control whose label reads like a confirmation.

  4. Read the report

    Candidates, the followed page, two screenshots and any warnings. If no candidate was found, the report says so; that is a finding about the page as rendered, not a conclusion about the site.

What § 312k BGB asks for, and what the scan can see

Since 1 July 2022, § 312k of the German Civil Code (BGB) has required a trader who lets consumers conclude a continuing obligation online to also let them terminate it online. The provision names the mechanics: a cancellation button (Kündigungsschaltfläche), labelled with nothing other than the words "Verträge hier kündigen" or an equally unambiguous wording, permanently available and easy to find; a confirmation page on which the consumer can state the kind of termination, the date, and how they can be identified; and a confirmation button labelled "jetzt kündigen" or an equally clear phrase. The declaration must then be acknowledged electronically in text form. That is the text of the law; how it is interpreted in a given case is for courts and lawyers.

What the browser can observe

The scan works on the page as it renders for a first-time visitor who rejected the cookie banner. It reads the accessible name of every link and button and matches it against a vocabulary that starts with the statutory wording and extends to the labels sites actually use: "Vertrag kündigen", "Abo kündigen", "Kündigung", "Verträge hier kündigen", "jetzt kündigen", "cancel subscription" and its variants. Each match is reported with the phrase that matched, so you can tell a statutory label from a near miss. The destination of each candidate is resolved in the page, the way an agent's destination guard resolves it before a click: a link's href, a button's form action, or the URL a script navigates to.

Following the best candidate means navigating to it, as a visitor would. It does not mean filling anything in or pressing anything on the page that appears. On that page the scan records the form fields it can see and the labels of controls that read like a confirmation, and takes the second screenshot.

What the scan does not decide

Whether the button is "easy to find" in the legal sense, whether the label is "equally unambiguous", whether a site that shows the button only after login is within the rule, and whether the trader is one the provision applies to at all: none of these are visible to a browser, and the report does not pretend otherwise. A site that renders its footer with JavaScript after a delay, or gates the whole page behind a region choice, can produce an empty candidate list for reasons that have nothing to do with the law.

What the scan gives a compliance team is a repeatable, dated observation: this is what the page showed, this is what the label said, this is where it went. Run it against your own sites on a schedule and the observation becomes a series.

The scan is an ordinary metered browser session of a dedicated organisation, capped per visitor and per day. The URL, the report and the screenshots are shown to you and then discarded; a usage journal keeps the time and the size of the run, as the privacy policy describes.

Questions about the cancellation button

Which sites does § 312k BGB apply to?

Traders who let consumers conclude continuing obligations (Dauerschuldverhältnisse) through a website, with some exceptions the provision names. Whether a particular site is covered is a legal assessment; the scan reports the page, not the assessment.

Does the scan cancel anything?

No. It navigates to the candidate page and reads it. No field is filled and no button on the confirmation page is pressed. The effect gates that stop a Browserberg agent from pressing a destructive control apply here as well.

What does it mean when no candidate is found?

That the page, as rendered for a visitor who rejected cookies, showed no link or button whose name matched the vocabulary. The button may be behind a login, in a menu that needs a click, or absent. The screenshot shows what the browser saw.

Is this a legal assessment of the site?

No. It is a list of observations from one page load: labels, destinations, fields. Whether they satisfy the provision is a question for legal counsel.

Can I run this for our own sites regularly?

Yes. The same report is one API call, cancellation-report, on any session, and a scheduled workflow can run it against each of your sites and post the result to your endpoint.

The same report from the API

The tool above calls this endpoint. Nothing on the page is submitted.

SESSION=$(curl -s -X POST https://browserberg.com/v1/sessions \
  -H "Authorization: Bearer $BROWSERBERG_API_KEY" \
  -H 'Content-Type: application/json' -d '{}' | jq -r .session.id)

curl -s -X POST https://browserberg.com/v1/sessions/$SESSION/cancellation-report \
  -H "Authorization: Bearer $BROWSERBERG_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{ "url": "https://www.abo-anbieter.example/" }' | jq '.candidates, .followed'

curl -s -X DELETE https://browserberg.com/v1/sessions/$SESSION \
  -H "Authorization: Bearer $BROWSERBERG_API_KEY"

Make the observation a series

Five browser hours, no card. Schedule the report against every site you are responsible for and keep the dated results.