Automated abuse pipeline for SEO operations

Automated abuse pipeline for SEO operations

The client ran an SEO operation with a team of five specialists focused on competitive domain takedowns. Every day, someone on the team would spend three to four hours filling out abuse forms across six different domain registries — each with its own layout, its own required fields, and half of them protected by CAPTCHA. On a good day, they'd cover maybe 10-15 domains. The rest piled up.

how we built it

dashboard showing abuse submission stats

We built a pipeline that does this without anyone touching a browser. At its core are Playwright-based workers, each with an adapter tailored to a specific registry. The adapter pattern keeps things clean — one interface, registry-specific logic inside. Adding a new registry means writing one file, not reworking the pipeline. When a form has CAPTCHA, the system sends it to the primary solver; if that times out or fails, it falls back to a second provider. Success rate sits around 85-90%, with the rest going into a retry queue.

what made it hard

What made this tricky was the fragility. Registries change their forms without warning — a renamed field or a shifted selector breaks the adapter silently. Without monitoring, the only signal is a drop in success rate the next day. We added daily cron-driven statistics: submitted, accepted, rejected, broken down by registry. That turned out to be more valuable than the automation itself — the team started making strategic decisions based on actual rejection rates instead of gut feel.

Daily stats by registry

Cron-driven submitted, accepted, and rejected counts per registry replaced gut feel with measurable adapter health.

email and evidence

For registries that only accept complaints via email, we split out a dedicated SMTP microservice. Keeping it isolated lets us monitor deliverability independently and scale it without touching the main application. Each complaint includes auto-generated screenshots of violations as evidence — Playwright captures them during the same session that fills the form.

85–90% CAPTCHA solve rate

Primary and fallback solvers feed a retry queue so most protected forms still complete automatically.

results

The result: 50+ complaints per day with zero manual effort. The specialists shifted from filling forms to analyzing which registries respond fastest and which complaint strategies actually work. One architectural debt we're aware of — the workers still run in the same process as the main app. At current scale it holds, but the next iteration should move them behind a proper task queue with real-time alerting when an adapter breaks.

The bigger takeaway: automation without observability is blind. The daily stats dashboard became the team's main decision-making tool — not the bot itself. If we were starting this today, monitoring would be day-one, not an afterthought.

Stack

Backend: Next.js 14 (Route Handlers), Prisma, PostgreSQL

Automation: Playwright, CAPTCHA solvers (2 providers)

Email: Node.js + nodemailer (standalone service)

Infra: Vercel Cron, Docker

2026, «VOSGLOS». All rights reserved.