codecrox

Service

Automated Web Scraping & Portal Connectors

Most operational data is not behind an API. It is behind a login, three menu clicks, and a table that only renders after a JavaScript call. We build headless browser pipelines that log in, navigate, and extract that data on a schedule — reliably enough to run unattended.

PythonPlaywrightTypeScriptProxy rotationScheduled workers

When a portal has no API, the browser is the API

Vendor portals, government registries, terminal systems, and carrier dashboards are built for humans. They assume a session cookie, a rendered page, and someone willing to click through pagination. When your team needs that data in a spreadsheet or an ERP every morning, someone ends up doing exactly that by hand.

Headless browser automation treats the portal as the interface it actually is. A real browser engine loads the page, runs its JavaScript, submits the form, and reads the resulting DOM — the same way a person would, without the person. What comes out the other end is structured JSON on a schedule you control.

This is not the same as fetching a URL and parsing HTML. Portals that matter operationally almost always depend on session state, client-side rendering, or a multi-step flow that a naive HTTP request cannot reproduce.

The parts that actually break

Writing a scraper that works once is straightforward. Writing one that still works in six months is the engineering problem, and it is where most in-house attempts stall. These are the failure modes we design around from the start:

Session and token handling
Logins that issue short-lived tokens, refresh them silently, or bind a session to a device fingerprint. Sessions are persisted and reused so you are not re-authenticating on every run and tripping rate limits.
Multi-factor authentication
TOTP can be handled directly. Email or SMS codes need an agreed inbox or webhook to read from. This is worth settling early because it shapes the whole architecture.
Markup that shifts
Selectors pinned to fragile CSS paths break on any redesign. Anchoring on stable text, labels, and ARIA roles survives far more change, and a schema check catches the rest before bad data reaches you.
Rate limits and blocking
Request pacing, proxy rotation where the terms of use allow it, and honest backoff. Hammering a portal is both fragile and a good way to lose an account.
Silent partial failure
The dangerous outcome is not a crash — it is a run that completes and returns nothing, or half of what it should. Row-count and schema assertions turn that into an alert instead of a quiet gap in your data.

What a delivered pipeline looks like

A finished connector is a background service, not a script someone has to remember to run. It executes on a schedule, writes to wherever your team already works, and tells you when something is wrong.

Output usually lands in one of three places: a database table, a Google Sheet or Excel file your operations team already lives in, or a webhook into your own software. None of these require your team to change how they work — the data simply arrives.

Retries are automatic and bounded. A transient portal outage should not need a human; a genuine change in the portal should reach you the same day rather than being discovered a week later when a report looks wrong.

Where we draw the line

We build automation against portals our clients are entitled to access — their own accounts, their own data, their own vendor relationships. We work within the terms of the services involved, and we will say so plainly when a target looks like it falls outside that.

We also do not bypass anti-bot systems designed to keep unauthorised parties out. Where a portal offers a sanctioned API or a data export, that is nearly always the better foundation, and we will tell you when one exists rather than building a scraper you did not need.

Common questions

Frequently asked

How long does a typical portal connector take to build?

A working prototype against a single portal is usually a matter of days, which is enough to confirm the data can be reached and to show you the shape of the output. Hardening it into a scheduled production service — retries, alerting, schema validation, and credential handling — is the larger part of the work.

What happens when the portal changes its layout?

Schema and row-count assertions detect it on the next run and raise an alert rather than passing bad data downstream. Because selectors are anchored on stable text and roles rather than brittle CSS paths, most redesigns need a small adjustment rather than a rewrite.

Can you handle portals that require two-factor authentication?

Yes. Time-based one-time passwords can be generated directly in the pipeline. Codes delivered by email or SMS require an inbox or webhook the automation is allowed to read. It is worth raising this in the first conversation, because it affects the architecture more than almost anything else.

Do we need to hand over our portal passwords?

The pipeline needs credentials to log in, but they belong in a secret manager you control, not in the code. Where a portal supports scoped or read-only sub-accounts, that is what we ask for.

Where does the extracted data end up?

Wherever your team already works — a database, an Excel or Google Sheets file, or a webhook into your own system. The point of the exercise is that nobody has to change their process to get the data.

Have a workflow like this to automate?

Send us the portal, the document, or the spreadsheet you are tired of filling in by hand. We will tell you within a day whether it is automatable — and what it takes.