Back to portfolio
Draft case study2026

Marketing Ops Tool

HubSpot Form Finder.

Built a rendered HubSpot form-audit crawler that checked 397 pages, resolved active form IDs, classified mismatches, and produced a review-ready CSV instead of source-code guesses.

PythonPlaywrightHubSpotChromiumCSV
Explore the rebuild

Pages

397 rendered pages

Statuses

4 form classes

Fields

10 core columns

Browser

Chromium via Playwright

The System Problem

A CRM rebuild starts by identifying the connected failures underneath the visible symptoms.

Root cause / 01

Form migration QA needed rendered evidence across hundreds of pages

A simple source crawl could not reliably identify the active HubSpot form on every page because forms rendered dynamically and pages also exposed cloned, correlation, instance, or historical IDs. The audit needed browser execution, not string matching against raw HTML.

The website also contained sections that should not participate in the audit. The tool therefore had to filter sitemap scope, load each relevant page in Chromium, extract multiple form signals, separate active IDs from noise, and flag ambiguous pages for manual review.

Audit signals

What the system was telling us.

01

Three hundred ninety-seven pages required review

02

Dynamic forms defeated raw source scans

03

Internal IDs created false positives

04

Four statuses summarized form compliance

05

Ambiguous pages required manual review

Rebuild Sequence

The work moved from diagnosis to architecture, implementation, and governance—in that order.

Stage 01

Define Audit Scope

Loaded sitemap URLs, excluded non-priority content sections, and established the approved form ID used as the compliance target for each rendered page.

Output / Filtered URL inventory

Stage 02

Render Real Pages

Used Playwright and Chromium to wait for HubSpot forms, inspect rendered DOM markers, form actions, portal IDs, and active form identifiers.

Output / Rendered form evidence

Stage 03

Classify Form Usage

Separated active IDs from cloned or internal identifiers, then classified each page as correct, different, mixed, or missing.

Output / Form status matrix

Stage 04

Export Review Data

Wrote URL, portal, active IDs, target comparison, other forms, internal IDs, status, and manual-review flags into a reusable CSV.

Output / Audit CSV report

Target System Architecture

Four connected layers turned the portal from a collection of tools into an operating system.

System spine

Target-state sequence

04 connected layers

Good automation and reporting sit on top of a governed data and process model—not the other way around.

Layer 01

Discovery Layer

Sitemap scope and exclusion rules limit the crawl to website sections where the approved HubSpot form is expected to appear.

Layer 02

Browser Layer

Chromium renders each page and waits for dynamic HubSpot forms so active IDs can be observed after client-side execution.

Layer 03

Extraction Layer

Multiple DOM and form-action signals identify active form IDs while filtering cloned, correlation, instance-level, and historical identifiers accurately.

Layer 04

Reporting Layer

Each URL receives a status, comparison fields, and manual-review flag so remediation can proceed from a structured audit file.

Qualitative Outcomes

The engagement focused on structural improvement, so the strongest results are clearer operations—not invented vanity percentages.

Coverage

Manual checks could miss scattered pages

397 pages reviewed systematically

Accuracy

Raw HTML exposed misleading identifiers

Rendered active IDs isolated

Classification

Form usage required manual interpretation

Four clear statuses produced

Handoff

Findings lived in ad hoc notes

Structured CSV enabled remediation

What Was Delivered

A reusable case study should make the work tangible without exposing confidential client data.

Deliverable 01

Sitemap filtering rules

Deliverable 02

Chromium rendering crawler

Deliverable 03

HubSpot ID extraction

Deliverable 04

False-positive ID filtering

Deliverable 05

Four-state classification logic

Deliverable 06

Review-ready CSV export

System note / final

Architecture before automation.

The interesting part was proving which form was actually active, not which IDs happened to exist in the markup. Once the crawler rendered pages and treated cloned or internal IDs as noise, a 397-page migration check became a structured dataset instead of a browser-tab endurance event.

Client URLs, portal identifiers, approved form IDs, and private audit output remain confidential.