
Vizzia
How Cashmyrr Built a Complete Database of French and UK Municipal Decision-Makers for Vizzia
No B2B database covers municipal elected officials and their teams. We scraped, enriched, and structured Vizzia's entire addressable market across France and the UK, every commune, every mayor, every deputy with their delegation, every cabinet director and DGS, then imported it into HubSpot ready to sell.
35K municipality records
cleaned and enriched
4,8K
job titles normalized
98.3% coverage
of all French communes
Selling to Municipalities Without Knowing Who Makes the Decisions
Vizzia is a Paris-based municipal security company. Their product, mobile video surveillance for combating illegal dumping, is purpose-built for French local governments. The buyers are mayors, deputy mayors with environmental or security mandates, cabinet directors, and DGS (Directeurs Généraux des Services, the top administrative officers running daily municipal operations).
The problem: Vizzia had almost no reliable data on these people.
Their HubSpot CRM had basic city hall records and some mayor names, but the depth was nowhere near what a serious outbound operation requires. Out of ~12,000 mayors, only 1,700 had professional email addresses, the rest were generic mairie@ inboxes. Direct phone numbers: 130 across the entire database. Deputy mayors were poorly documented, with no structured data on their specific delegations. Cabinet teams and senior administrators were virtually absent.
This is the core challenge of selling to the public sector. Unlike private companies, where LinkedIn, Apollo, or ZoomInfo give you reasonable coverage, French municipal officials live outside conventional B2B databases. There is no single source of truth for who holds which mandate in which commune. And the level of granularity Vizzia needed (which deputy mayor controls the waste management budget in a specific municipality of 15,000 inhabitants) simply doesn't exist in any tool you can subscribe to.

What Vizzia Needed
A complete database of municipal decision-makers across France, not just mayors, but deputy mayors with their specific delegations, cabinet directors, chiefs of staff, and DGS, with validated professional emails and direct phone numbers.
A clean CRM foundation where every municipality record is enriched with official identifiers (SIRET, INSEE code, EPCI affiliation) and matched against government reference datasets.
A replicable methodology that could extend to new markets, starting with UK councils for Vizzia's international expansion.
Data imported directly into HubSpot, segmented and ready for activation, not a CSV gathering dust in a shared drive.
Our Approach: Build the Market From Public Data Up
We framed this as a TAM Build, TAM meaning Total Addressable Market. The goal: define and populate the complete universe of accounts and contacts Vizzia could sell to, starting from raw government data and ending with a CRM-ready, segmented database.
The engagement ran across multiple phases from mid-2025: an initial data sample to validate the approach, then the full scraping and enrichment build, a comprehensive CRM cleaning pass, deep contact-level enrichment, a Datapolitics intent signal integration, and a UK market extension. All delivered through a monthly RevOps retainer that gave us the flexibility to handle interconnected workstreams without artificial project boundaries.

Scraping Every Commune, Mayor, Deputy, Cabinet : Across France and the UK
This is the core of what makes this project different. The data Vizzia needed doesn't exist in any off-the-shelf tool. We built it from scratch.
All 35K French communes. We wrote Python scripts pulling from five official government sources: the COG (Code Officiel Géographique, INSEE's authoritative directory of all communes), geo.api.gouv.fr for geographic and administrative data, the Annuaire du Service Public for mairie identifiers (SIREN, SIRET), and EPCI reference datasets. This gave us the structural foundation: 35K communes, 1K EPCI (intercommunal cooperation bodies), 101 departments, 35K mairie records.
The mayors: with up-to-date data, not former officeholders. Identified through electoral data (data.gouv.fr municipal election records) and government directories, cross-referenced to ensure we had current mandates only. Each mayor record included name, professional socio-economic category, and official function.
The deputy mayors: with their specific delegations. This is where the granularity gets rare. We didn't just scrape names, we captured each deputy's delegation (environment, security, public tranquility, urban cleanliness, urbanism) and commission assignments. This is the single most important data point for Vizzia's sales team: it tells them whether a specific person has purchasing authority over the problem Vizzia solves. Coverage went from 1,3K to 1,8K delegation assignments: 100% of deputy mayors in the database.
Cabinet and management teams. Directors of cabinet, chiefs of staff, DGS, DGST, the administrative layer that actually manages vendor relationships and procurement processes. These contacts were identified through a combination of SERP research, LinkedIn scraping, and AI-assisted extraction using LLM agents running on n8n (a workflow automation platform).
UK councils for international expansion. The same methodology was adapted for the British market, enriching UK council records, identifying relevant contacts, and structuring the data for Vizzia's GTM expansion. This proved the framework was portable: different country, different data sources, same approach.
Quality-first delivery in batches. Nothing went into the CRM unvalidated. We followed a structured cycle: initial sample batch → quality check with the Vizzia team → larger second batch → client validation → final delivery → CRM import. In the public sector, getting someone's function wrong kills credibility instantly.
The tooling behind all of this: government APIs, custom Python scripts, SERP scraping, LinkedIn extraction, Apollo, FullEnrich, LLM-powered agents on n8n, and a lot of manual quality-checking. No single tool does this. It's a data engineering operation that combines public data, AI extraction, and human validation at every stage.
Cleaning 35K Municipality Records Against Official Government Data
Parallel to the TAM Build, we ran a deep cleaning pass on Vizzia's existing HubSpot database. The goal: make every record trustworthy by validating it against official reference data.
The headline problem: SIRET numbers were present on only 6% of records SIRET is the unique French business identifier, without it, you can't reliably deduplicate, match with third-party data, or comply with public procurement requirements. Region names were inconsistently formatted. 1K commune records had no country field. Almost 3K records had no usable identifier at all.
We built a four-phase Python pipeline: audit and deduplication, geographic enrichment against the COG, consistency checking, and SIRET lookup via the Annuaire du Service Public. The pipeline applied ~ 12K individual corrections.
The SIRET transformation: 6% → 95.2%. By matching records against official directories (first by INSEE code, then by SIREN for non-commune entities), we added 33K validated SIRET numbers. After cleaning, the database matched 98.3% of all official French communes, with gaps almost entirely in overseas territories.
New fields added: EPCI code, name, and type for 34K communes. Enrichment confidence scores. Correction audit trails. Everything documented for ongoing maintenance.

Enriching Every Contact With Emails, Phones, Titles, and Delegations
A clean municipality database isn't enough. Reps need to call or email a specific person. That required deep contact-level enrichment.
4,8K job titles normalized and cleaned, from inconsistent, self-described titles to a standardized format with separate fields for title, delegation, and service category.
3,5K contacts tagged by service (Élus, Sécurité, Tranquillité publique, Maire, Cabinet), enabling targeted list building for the first time. Before: the only filter was population size. After: "all deputy mayors with a waste management delegation in Île-de-France municipalities between 10,000 and 50,000 inhabitants."
Phone numbers more than doubled: from 1K to 2,5K. We also deployed a one-click enrichment button inside HubSpot (using FullEnrich) so reps could trigger on-demand enrichment when preparing individual calls.
~900 LinkedIn profiles verified. Low in absolute terms, but significant given the low LinkedIn penetration among municipal officials.
Connecting Intent Signals to Know When a Municipality Is Ready
Vizzia had contracted with Datapolitics, a provider that uses AI to scan local press, municipal council minutes, and public decisions for buying signals. The missing piece: connecting those signals to HubSpot.
We built a daily polling workflow on n8n that pulls new signals from the Datapolitics API, matches them to HubSpot company records by INSEE commune code, updates five dedicated properties on the company record, and creates a timestamped note preserving signal history. The system handles Datapolitics' 1,000 API calls/day limit by querying at the department level, with error handling routed to Slack alerts.
Result: when a municipality discusses waste management issues in a council meeting or local press picks up an illegal dumping story, Vizzia's reps see it on the company record in HubSpot, a signal to prioritize outreach.
Results
What Vizzia Walked Away With
A complete municipal TAM: 35K enriched municipality records covering 98.3% of all French communes, plus UK council data for international expansion.
Deep, industry-specific contact data: mayors, deputy mayors with delegations, cabinet directors, normalized titles, delegation assignments, service tags, phone numbers, LinkedIn profiles. The kind of data that doesn't exist in any standard B2B database.
A CRM with reliable identifiers: SIRET at 95.2%
Automated intent signals: Datapolitics → HubSpot integration, polling daily, matching by INSEE code, surfacing buying signals on company records.
A one-click enrichment button in HubSpot for on-demand contact enrichment.
A portable methodology: proven on France, then replicated for the UK market with different data sources and the same framework.
Full documentation in Notion covering data sources, pipeline architecture, scripts, and maintenance procedures.
From Generic City Hall Calls to Knowing Who Controls the Budget
Before this project, Vizzia's outreach was essentially blind. Emails went to generic inboxes. Reps had no way to know whether a deputy mayor responsible for waste management even existed in a given municipality, let alone their name, phone number, or email.
After: the sales team operates with a complete map of their market. They filter by function, delegation, service, population, region, and EPCI. Multi-channel sequences are possible because direct numbers exist. Messaging is personalized to the specific mandate of each official. And intent signals flag the right moment to engage.
The methodology also scaled internationally. The same framework built for France was adapted for UK councils, different country, different data sources, same structured approach. What started as a French data problem became a repeatable engine for entering new public-sector markets.