Gå til indholdet

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, indeks cvr-permanent, root-objekt Vrvirksomhed. 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, samt telefonNummer / 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

  1. Bekræft host-valg (default: Cloud Run Jobs + Scheduler, EU).
  2. Skriv Dockerfile + IaC (Terraform/gcloud) til Cloud Run Job + Cloud Scheduler; læg CVR_USER/CVR_PASS i Secret Manager.
  3. Vælg output-destination (mail via SendGrid/SMTP i EU, eller GCS-bucket i EU) og implementér.
  4. Tilføj idempotens/dedup → kun nye leads siden sidste kørsel.
  5. (Valgfrit) KUN_UDEN_HJEMMESIDE = True som mulighed, valider mod virkeligheden.
  6. 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.