If you have ever pulled cost of living figures off Numbeo for a report, you know the routine. Scroll to the table, select a few rows, copy, paste into Excel, then spend almost as long fixing the broken formatting as you spent collecting the data. I got tired of doing that and wrote a small userscript that will export Numbeo data to PDF in one click. Below is what it produces, how to install it, and where its limits are.
Why copy-pasting Numbeo tables eats an afternoon
Copying one table for one city is mildly annoying. The problem scales badly.
A single Numbeo cost of living table runs to dozens of rows split across sections — restaurants, markets, transportation, utilities, rent — and a spreadsheet rarely keeps that structure intact on paste. Rows merge. Currency symbols split off into a column of their own. Price ranges arrive as text in a single cell instead of two numbers you can sort.
Do that for a handful of cities and it is tedious. Do it for a full report covering dozens of locations and it becomes a genuine time sink, usually the most tedious part of the whole project, despite having nothing to do with the analysis you are actually trying to produce. That was the point where I stopped doing it by hand.
What happens when you export Numbeo data to PDF automatically
The script adds a single button to Numbeo ranking pages. Click it and it reads the entire cost of living table, keeps the structure intact, and generates a formatted PDF that downloads immediately.
There is no cleanup stage. No fixing column widths, no re-aligning rows, no stripping out stray formatting artifacts. The file that comes out is already in a state where you can attach it to an email, drop it into a report, or hand it to a client without touching it again.
The export can also include automatically generated summary insights alongside the main table, so you get an overview without reading every row yourself.
Why the text stays selectable
Plenty of export tools technically save you a step and still hand you something you cannot use. The common failure is a screenshot-style image of the table: it looks right, but you cannot search it, copy a figure out of it, or edit anything. The other common failure is a file that exports fine but looks messy, with inconsistent spacing and columns that do not line up.
This script avoids both. The layout is consistent from the first export, and the text in the PDF stays real text rather than being baked into an image. If a client wants to pull the rent figure for Lisbon out of page three, they can select it.
Four situations where a cost of living comparison report saves real time
The underlying need is the same in each of these: get from "here is a webpage with the data I need" to "here is a usable file" as quickly as possible.
Researching global living costs
If you are comparing rent, groceries, transportation, or utilities across cities, having the raw numbers in a clean table makes it far easier to spot patterns and build your own comparisons afterward. The PDF is the record. The analysis happens after.
Preparing a report for a client
A polished PDF that already looks presentable removes the awkward step of taking raw data and dressing it up before sending it along. That step is almost never billable.
Comparing countries for a relocation decision
A structured side-by-side view of cost data lets you weigh options without bouncing between a dozen browser tabs and a half-finished spreadsheet.
Writing content built on cost-of-living figures
For articles, newsletters, or social posts, a clean source document speeds up the writing considerably, and gives you something to check back against later when a number looks wrong.
Installing the Tampermonkey userscript
A userscript is a small piece of JavaScript that runs on one specific website after the page loads and changes what that page does. It is not an application and it is not a browser extension on its own — it needs a manager to run it. The usual one is Tampermonkey, a free extension for Chrome, Firefox, Edge, and Safari.
Setup takes about two minutes:
- Install Tampermonkey from Tampermonkey's official download page.
- Open the script file: download the Numbeo PDF export userscript.
- Tampermonkey will offer to install it. Confirm.
- Open any Numbeo cost of living or ranking page. The export button appears above the table.
No account, no configuration file, and no technical background required beyond that.
If the export button does not appear
Two things usually explain it. Either you are on a Numbeo page that does not carry a cost of living table, in which case the script stays out of the way, or the script has been switched off in the Tampermonkey dashboard. Open the dashboard and check the toggle.
There is a third, less pleasant possibility. Userscripts are tied to the structure of the page they run on. If Numbeo restructures its tables, the selectors the script depends on stop matching and the button stops appearing. That is normal for this kind of tool, and it is the main ongoing maintenance cost of any browser automation. I write up fixes as I make them in my build notes on other tools I have written.
When a PDF is the wrong format
PDF is right when the output is a deliverable — something a client reads, a document that goes into a report, a file that gets emailed. It is the wrong choice when the output is an input.
If you plan to sort, filter, join the figures against another source, or track how they move month to month, you want CSV, a Google Sheet, or a proper database table instead. Pulling numbers back out of a PDF in order to analyse them is a step backwards. That is a different build, and it is closer to the data cleaning and storage work I usually do.
Terms of service, robots.txt, and where responsibility sits
Numbeo's figures come from user-submitted contributions that are aggregated for display on the site. You can read how Numbeo collects and aggregates its cost data on their own methodology page. That matters for two reasons.
The first is accuracy. Crowd-sourced cost data is directional. It is good for comparing two cities at a glance, and weak as a sole source for a decision with real money behind it.
The second is permission. Numbeo's terms of use may contain specific provisions about automated extraction or republishing, and a site's robots.txt file states which automated access the operator asks for — the format is defined in RFC 9309, the Robots Exclusion Protocol. Neither of those is a question I can answer on your behalf. Exporting a table for your own private research sits differently from republishing those tables externally or shipping them to a client under your own name. Read the terms and make the call before you distribute anything.
If you need this for a site that isn't Numbeo
The Numbeo script is narrow by design. It does one thing on one site.
Most of what I build is that same idea pointed somewhere else: a supplier catalogue, a council planning portal, a competitor's pricing page, a directory that nobody has bothered to offer an export for. Depending on the site, the answer is a userscript like this one, a Chrome extension, a Playwright bot that runs on a schedule, or a pipeline that drops rows straight into Google Sheets or PostgreSQL. Which one it is depends on whether the site needs a login, how often you need the data, and where you want it to land. There is more detail on the browser automation services I offer, and on how I work as a one-person operation.
If you have a page you keep copy-pasting out of, send me the site and what you need out of it. I will tell you which of those four it is and what it takes to build. I sell through Fiverr, and I write the code myself.
