portfolio Frilanspengen
Frilanspengen wip

Every comparison was owned by a seller.

A comparison site I built for the 14 Swedish umbrella employment companies — 26 fields each, and a scraper that only records a value when it finds that exact string on the provider's own page.

built with
TypeScript
span-matched scraper
llms-full.txt
weekly re-read
Frilanspengen key art

Live in stealth. Public launch June 2026.

the gap

Fourteen providers. Nobody neutral.

whyclose

Every “comparison” on the first page of Google was run by one of the fourteen. Almost right is never right when it is your tax ID on the invoice.

the rule

The model refuses to guess.

readIt fetches the provider's own page.

Primary source only. Never a summary, never a secondary write-up, never another comparison site.

matchIt looks for the exact string.

A value is only stored if the characters appear verbatim in the source HTML, and the span is recorded with it.

no matchIf it is not there, the cell stays empty.

This is the whole design. A plausible number is worse than a blank one, because a blank one makes you go and look.

dateEvery value carries when it was read.

Prices change. A figure without a date is a rumour with formatting.

what happened

Then they turned on each other.

whyclose

Some were glad. Some were not, at all. I learned more about the category from what they said about their competitors than from any of their own sites. Several have since reached out — not with threats, but to update their rows.

the numbers

What it tracks. What it won't say.

14companies, weekly
26fields per company
8×spread between cheapest and dearest
0values without a source
tl;dr

The whole thing, in four lines.

  1. the gapFourteen Swedish umbrella companies, an 8× price spread, and every comparison on Google owned by one of them.
  2. the ruleNo value is stored unless the exact string exists in the provider's own page, with the span and the date recorded.
  3. the designAn empty cell over a wrong one. A plausible number is worse than a blank one, because a blank one makes you look.
  4. the resultI told all fourteen I was launching, and they started telling me about each other. Several now write in to correct their own rows.
the comparison14 companies, 26 fields, every value sourced.
frilanspengen.se ↗