CVR-leads — teknisk handoff
Fuld teknisk brief for CVR-lead-jobbet. Peg fx Claude Code på denne fil for at bygge/host det.
1. Formål og forretningskontekst
Ejer: Allan (Melsen Consulting). Mål: Sælge simple, billige hjemmesider (< 5.000 kr) til danske enkeltmandsvirksomheder der sandsynligvis mangler en hjemmeside. Primært Jylland (start i Region Nordjylland + Midtjylland), sekundært hele DK.
Vigtigste markedskonklusioner: - ~415.000 aktive firmaer i DK, ~94 % mikrovirksomheder, ~233.000 uden ansatte. Jylland ≈ 52 %. - Bedste salgsmål: brancher hvor kunden aktivt googler ydelsen — tømrer/snedker (433200), anlægsgartner/havemand (813000), maler (433410), rengøring (812100), vinduespudser (812210). Særligt nystartede CVR er gode leads. - Frasortér portal-/booking-/kontraktdrevne brancher (frisører, vognmænd, traditionelt landbrug, markedsboder m.fl.). - Differentiering: en "billig side" alene taber mod gratis Google Business Profile. Produktet skal levere lokal Google-synlighed + en handling (tilbudsformular/booking).
2. Den tekniske opgave
Byg et scheduleret job der jævnligt (fx ugentligt) trækker de nyeste aktive enkeltmandsvirksomheder i de prioriterede brancher + kommuner fra CVR, frasorterer reklamebeskyttede, og gemmer resultatet (CSV) et sted Allan kan bruge til leads.
Der findes allerede et fungerende udtræks-script (kode/cvr_nyeste_udtraek.py). Typiske opgaver:
1. Pak scriptet til at køre scheduleret i skyen (containerisér/opsæt).
2. Håndtér credentials sikkert (secrets, ikke i kode).
3. Send/lagr output (mail til Allan, EU-cloud-storage eller privat repo).
4. Evt. udvid: dedup mod tidligere kørsler, flere brancher/regioner, filtrering på "uden hjemmeside".
3. Datakilde — CVR (Erhvervsstyrelsen)
- Officiel distribution-API (Elasticsearch):
http://distribution.virk.dk/cvr-permanent/_search, indekscvr-permanent, root-objektVrvirksomhed. Kræver HTTP Basic Auth. - Adgang (gratis): skriv til
cvrselvbetjening@erst.dk, underskriv vilkårserklæring, få brugernavn+password. Docs: https://erhvervsstyrelsen.dk/kom-godt-igang-med-elasticSearch - Credentials som miljøvariabler:
CVR_USER,CVR_PASS. Må ALDRIG committes. - Alternativ uden ventetid:
cvr.dev(30-dages gratis prøve, moderne REST-API med branche/region-segmentering). - Relevante datamodel-felter:
cvrNummer,reklamebeskyttet,virksomhedMetadata.nyesteNavn.navn,...nyesteHovedbranche.branchekode,...nyesteBeliggenhedsadresse(kommune.kommuneKode, postnummer, vejnavn...),...nyesteVirksomhedsform.virksomhedsformkode(10 = enkeltmandsvirksomhed),...sammensatStatus(AKTIV),...stiftelsesDato, samttelefonNummer/elektroniskPost/hjemmeside(lister med evt.hemmelig: true).
4. COMPLIANCE — guardrails (må ikke brydes)
- Ejeren af en enkeltmandsvirksomhed er en fysisk person → navn/adresse/tlf/e-mail er persondata. Allan er dataansvarlig.
- Reklamebeskyttede (
reklamebeskyttet = true) frasorteres altid og må ikke bruges til opsøgende salg. (Scriptet gør det allerede.) - Uanmodet e-mail/SMS-markedsføring kræver samtykke (markedsføringsloven § 10). Telefon/fysisk post er den sikrere B2B-kanal; respektér Robinsonlisten.
- Dataminimering: slet gamle udtræk; opbevar ikke persondata længere end nødvendigt.
- Foretræk EU-hosting af hensyn til GDPR.
5. Hosting-beslutning
Jobbet er meget let (sekunders kørsel, fx ugentligt) → kan køres ~gratis (verificeret juli 2026):
- Anbefalet ved GDPR-fokus: Google Cloud Run Jobs + Cloud Scheduler i EU-region
(
europe-west*). Inden for free tier ≈ 0 kr/md, data i EU. - Hurtigst i gang: GitHub Actions cron-workflow i privat repo (2.000 gratis min/md). Credentials som encrypted secrets. NB: runnere typisk US-baserede.
- Fuld kontrol + EU: Hetzner Cloud lille VPS (~4,50 €/md, DE/FI) med crontab.
- Fravalgt: PythonAnywhere (gratis cron fjernet for nye konti 2026, US-hostet).
Åbent valg: default-anbefaling er Cloud Run Jobs + Scheduler (EU). Byg config derefter, medmindre andet siges.
6. AI-model-uafhængighed (baggrund)
Provisionering i Google Cloud er model-agnostisk (gcloud/Terraform/API'er). Man er ikke afhængig af Gemini — Claude Code kan generere og køre Terraform/gcloud direkte (Vertex AI-integration). Vertex AI Model Garden hoster også Claude-modellerne.
7. Foreslåede næste skridt
- Bekræft host-valg (default: Cloud Run Jobs + Scheduler, EU).
- Skriv Dockerfile + IaC (Terraform/gcloud) til Cloud Run Job + Cloud Scheduler; læg
CVR_USER/CVR_PASSi Secret Manager. - Vælg output-destination (mail via SendGrid/SMTP i EU, eller GCS-bucket i EU) og implementér.
- Tilføj idempotens/dedup → kun nye leads siden sidste kørsel.
- (Valgfrit)
KUN_UDEN_HJEMMESIDE = Truesom mulighed, valider mod virkeligheden. - Kort README med drift/opsætning + note om compliance.
Kilde: research-fasen (claude-code-handoff.md, juli 2026). Markedstal fra markedsanalysen;
verificér mod CVR/Danmarks Statistik før store beslutninger.