Money
How a free job site pays for itself without selling you
Aaron at Job Umbrella · August 21, 2026 · 8 min read
Every free product has an answer to “who is paying for this”, and if the answer is not obvious, it is usually you. So here is mine, written down in public before there is any revenue at all, which is the only time you can make this kind of commitment cheaply.
The money I am not taking
The obvious revenue for a site like this is employers paying to promote their listings. Sponsored results, featured employer slots, pay to appear at the top of a search. It is what the large job boards do, it works, and it would work here.
I am not going to do it, and the reason is not squeamishness about advertising. It is that it puts this site on both sides of the same transaction. The job seeker wants the listings ranked by how well they fit. The employer paying for promotion wants their listing ranked higher than that. Those are different orderings of the same list, and the moment money is attached to one of them, every ranking decision has a thumb on it.
You can write all the guardrails you like around a conflict of interest. The reliable way to remove it is to refuse the revenue that creates it.
People will tell you it can be fenced: only verified employers, human review of every listing, guaranteed inclusion but never a rank boost, capped at three per page. Those are good rules. They are also a set of rules whose entire purpose is to contain a problem that does not need to exist, and rules like that erode one quarter at a time, in the direction of the money.
So the promise is the flat version, with no exceptions in it: nobody can pay to get to the top of your list. Not now, not at a different traffic level, not for a partner. If that ever changes, it will have to start with retracting this paragraph, which is precisely why it is written here with a date on it.
What pays for it instead
Three things, in order of how much I like them.
- Advertising, kept away from the work. Ordinary display ads, on free-tier screens only. Never on a resume page, never on a review, never beside an AI result. An ad next to the thing you came here to do is a tax on the thing you came here to do.
- A paid tier, later. No advertising and higher AI limits. The person paying is the person using it, which keeps the incentives pointed the same direction as the product.
- Affiliate revenue from services aimed at job seekers, if and only if it never touches ranking.
Note what all three have in common: the money comes from the side of the table you are sitting on. That is the whole test I apply.
To be clear about the current state — no advertising is running. The code is merged and switched off, waiting on a review from Google. Everything on the site today is free and nothing is being sold.
The consent work, and the bug I shipped in it
Turning ads on eventually means a consent management platform: the dialog that asks European visitors what they permit, and the opt-out link several US states require. That went in this week, loading only when advertising is actually enabled. With ads off, European visitors were otherwise being shown a consent wall on a page that will never serve them an ad, which is a rude thing to do for no reason.
There was also a robots problem worth knowing about if you ever do this. The rules blocked Google’s advertising crawler from the exact pages that carry the ad slots. Every general crawler should be blocked from the signed-in app — that part was right — but the ad-review crawler has to reach the pages it is classifying, or those pages can never be reviewed. It now has its own narrow exception, scoped to it alone.
And then the part I got wrong. I added a “Cookie preferences” link to every footer so people could reopen their consent choices, wired it up, and shipped it. It called a method that does not exist on this platform’s live instance. The link did nothing, for everybody, silently — no error, no console warning, just a button that visibly did nothing when clicked.
I did not find that. A user reported it. Which is the useful lesson: a control that fails by doing nothing looks identical to a control that is working, and no amount of code review catches it. It now calls the interfaces that actually exist, and it was verified by clicking the real button on the real site rather than by reading the code and believing it.
The extension went live
Separately, the browser extension cleared review in both the Chrome Web Store and Firefox add-ons. Most of the week’s commits are its parser learning to read real job pages: LinkedIn renders postings asynchronously, so the capture has to wait and retry rather than read an empty page. Dice, Monster, CareerBuilder, Glassdoor and ZipRecruiter each got their own extraction.
Firefox’s automated linter also caught something fair: the parser wrote scraped HTML into an element to read the text back out. It was not attached to the page, so it was not exploitable — but it is an unverifiable pattern and it is now done with an inert parser instead. A linter that argues with you about a thing you are sure is fine is usually worth the ten minutes.
The revenue question is the one commitment I would ask you to hold me to. It is on the blog index as well, so it is not buried in a post.
Release notes
August 21, 202622 commits · no migrationShipped
- Consent management platform, loaded only when advertising is enabled.
- A Cookie preferences link in every footer, including the home page's own footer.
- An advertising-crawler exception in robots, scoped to that crawler alone.
- The browser extension is live in the Chrome Web Store and in Firefox add-ons.
- Extension capture for LinkedIn, Dice, Monster, CareerBuilder, Glassdoor and ZipRecruiter.
- Landing-page tool cards link to their Help Center tutorial.
Fixed
- The Cookie preferences link called a method that does not exist, so it did nothing for every visitor. Reported by a user.
- The extension popup collapsed to a small box in Firefox, and a Firefox version rule blocked the add-on from loading.
- A retry loop dropped the job description it had just captured.
- Google sign-in returned a redirect mismatch. The configured client did not exist in the provider console. A new client was created and sign-in was confirmed.
Security
- The extension parser no longer writes scraped HTML into an element. It parses into an inert document.
- The privacy policy gained a browser-extension section naming what is captured and what is stored.
Still open
- Advertising stays switched off and is waiting on a review decision.
- A California opt-out test through a commercial network returned an inconclusive result, so it is unverified.
Everything here is free to use
AI resumes and cover letters, a fit check against any posting, search across 12 job boards plus government sites, and a Board that tracks every application. No employer can pay to reach the top of your list.