Blog

30 pricing pages, one question

We asked jurl --precise for the cheapest paid plan on 30 SaaS pricing pages. It answered 22, 19 of them right, and left the other 8 empty.

You have a list of SaaS companies and you want a column with the price of each one’s cheapest paid plan. People hand that job to AI agents now, and it’s exactly the job where an invented number ends up in a spreadsheet without anyone noticing.

We tried it with jurl --precise on 30 real pricing pages, with the same question every time: “What is the monthly price of the cheapest paid plan?” (re-run with jurl 0.1.11 on 7 October 2026).

It answered 22. 19 were right:

Page Answer
linear.app $10 per user/month
vercel.com $20/mo
supabase.com $25/month
github.com $ 4 USD per user/month
notion.com €9.50
slack.com €6.75
figma.com $3/mo
airtable.com $20/user/month
zapier.com $19.99
dropbox.com €9.99 / month
sentry.io $26.00/mo
tailscale.com $8 per user, per month
raycast.com $8/ month
trello.com $6
miro.com $8/month per member, billed yearly
calendly.com $10
loom.com $18
bitwarden.com $1.65/Month
cal.com $12

Each answer is the page’s own text, odd spacing included, with a link that opens the page with that price highlighted.

The three wrong ones fail the same way. Each is a real price from the page, just not the plan’s. Netlify’s $5 is a row in its table of credit packs (500 credits for $5); the Personal plan, $9 a month, is higher up the same page. DigitalOcean’s $0.01/GiB per month is a storage rate. Render’s $6/month is its smallest database instance, while the page’s plans start at Pro, $25 a month plus compute. jurl never prints a number that isn’t on the page, but a number that is on the page can still be the wrong one. The link is there so checking takes one click.

The other 8 came back empty, which is what we want when there’s no clear answer. Two pages wouldn’t load: GitLab blocked the request, and Plausible’s /pricing is a 404. PostHog charges by usage, so there’s no “cheapest plan” written anywhere. On Heroku, 1Password, Todoist and Asana nothing jurl read was clearly the answer. Obsidian’s page says “$50 USD”, “Per user, per year”: a real number, but a yearly one. jurl scored it low and left the cell empty rather than put a yearly price in a monthly column.

A second run gave the same answers except Zapier’s, which came back empty, just under the bar.

From the bare domain

When you don’t have the pricing page, --follow goes looking for it across the site. Started from the bare domain (jurl --precise --follow -q "…" todoist.com), it answered 28 of 30 in about 3 seconds each: Todoist from its billing FAQ ($5/month billed yearly), 1Password from /pricing/personal ($2.99), Plausible from its home page ($9 /month), Obsidian from /sync ($4 per month). It also wandered off: GitHub’s answer came from the Copilot plans ($10 USD), GitLab’s from the AI credits included with each seat ($12), Heroku’s from its dyno sizes ($7, for Basic, when Eco is $5). 22 of the 28 were right. If you have the pricing page, start there.

How --precise picks

jurl first picks the paragraphs that answer, as usual. Then it cuts them into candidates that are pieces of the page’s text (prices, numbers with their units, names, sentences, lines of code) and asks Jev which one is exactly the answer, with an option for “none of these”. If no candidate is clearly ahead, the answer is empty. Each page takes about a second, and 10,000 pages cost a few dollars.

$ jurl --precise -q "What is the monthly price of the cheapest paid plan?" linear.app/pricing
$10 per user/month

The answer is on the first line, then the block it’s in and the link. jurl exits 0 when it answers, 1 when no part of the page is exactly the answer, and 2 on errors (a page that won’t load), so a script can tell an empty cell from a broken one.