Skip to main content
Cancelling a subscription is slow on purpose: a survey, a discount, a pause offer, a second discount, then the real button at the bottom of the page. Four of them take an evening. This program sends one agent per service, each signed in through its own profile, to walk every cancellation flow as far as the last button and stop there. You read what each one found and pick which to cancel, and a second run presses the button for those, and only those.

What you need

  • An Outcrawl API key in OUTCRAWL_API_KEY.
  • One profile per service, signed in to that site and labelled subs-<service> (subs-nytimes, subs-audible…). Sign each one in once: from TypeScript with oc.browser({ profile }), or with an agent run that types your password from a text secret. If a site emails a sign-in code, that run reads it through a connected inbox integration, such as AgentMail.
  • A terminal. The program asks you which services to cancel between its two passes.

How it works

1

Each service gets its own signed-in browser

Every run names its service’s profile, so it starts signed in. A profile opens one browser at a time, so a service’s two runs never overlap, while different services run side by side, MAX_AT_ONCE at a time. Every key on your account shares one browser slot count. Browsers, agent runs, crawls, searches and scrapes that aren’t served from cache each hold a slot. A submit over the limit is refused with ConcurrencyLimitError, and the program waits 20 seconds and tries again.
2

Pass 1 walks each flow to the last screen

An agent run answers the survey, declines every offer, and stops on the final screen without pressing its button. Its schema brings back the plan, the price, the renewal date, every screen it passed, the offers it declined, any fee to cancel, and the exact label of the final button. The rule Only use nytimes.com. is enforced: the agent cannot go to any other site.
3

You choose

Nothing has been cancelled yet. The program prints what each run found and asks which to cancel. No run is waiting on you: the approval sits between two runs.
4

Pass 2 presses the button you approved

A fresh run on the same profile follows the path pass 1 found, declines the offers again, and presses the final button, unless the fee on that screen differs from the one you saw. It returns the confirmation and the last day of access, or exactly what is left for you to do.
The stop at the last screen is in the task, not in a rule. Rules can block a payment, an order, a message or a sign-up, but Outcrawl’s irreversible check reads a button that starts with “Cancel” as a way out of a page, so no rule can block a cancellation. That is why nothing rests on pass 1: the only run told to press the final button is the one you approved. Read path in pass 1’s answer before you say yes.

The program

What you get back

Pass 1, and your answer:
Pass 2, also written to cancellations.json with pass 1’s walkthroughs:

What it costs

An agent run is billed for the model’s usage, browser time and proxy usage, per pricing. A typical run costs about 15 credits a minute all in, proxy usage included. That is an estimate: the real figure depends on the task, and a page-heavy site costs more.
  • Pass 1 takes about 2.5 minutes per service, so about 38 credits a service.
  • Pass 2 takes about 1.5 minutes, about 23 credits for each service you approve.
Four services with three approved: 4 × 38 + 3 × 23 = about 221 credits, once. Each run’s caps.budget is 150 in pass 1 and 100 in pass 2.

Make it yours

  • Watch pass 2 as it happens: log the watchUrl from job.submitted and open it; press take control in the live viewer to step in at any point, then hand it back. While you hold the wheel, the run bills browser time (1 credit a minute) and proxy usage only, with no model usage.
  • Let a run sign back in when a session has lapsed: give it your password as a secret and an inbox integration for the emailed code.
  • Run pass 1 alone each month as an audit: every plan, price and renewal date you pay, with nothing cancelled.
  • Post the pass 2 results to Slack with one HTTP call to an incoming webhook.

Agents

Submit a run, caps and typed results.

Profiles

Stay signed in to each service.

Rules

Which rules are enforced, and which are guidance.

Human in the loop

Take and release control of a live run.