PasteSheet icon PasteSheet logo mark — a spreadsheet grid with a curly brace on a green rounded square PasteSheet

Run a job board with listings in a Google Sheet

A job board is a list of openings people filter by role, location, and remote. PasteSheet turns a Google Sheet of listings into a live, cached JSON API with filtering, search, and pagination built in — so you launch a board and post a job by adding a row.

Last updated

Key facts

  • The Google Sheets API allows 300 read requests per minute per project and 60 per minute per user. Past that it returns 429 RESOURCE_EXHAUSTED. source
  • A cached endpoint reads the sheet once per TTL, not once per request — so 10,000 visitors become one upstream read, and Google's quota stops being your problem.
  • The board holds up to 500 openings on Free and 5,000 on Starter ($9/mo); Pro ($19/mo) lifts the row cap.
  • The endpoint is read-only: a candidate can filter and read openings but cannot apply through it. Point each apply link at your ATS or a form tool that owns the writes.

A job board is a spreadsheet with a search bar

Every job board is the same table underneath: a row per opening with a title, company, location, a remote flag, and a link to apply. Keeping that in a Google Sheet means anyone on your team can post a role — no CMS, no admin dashboard, no engineer in the loop.

PasteSheet serves the sheet as JSON and hands you the querying a board needs: filter by role or location, match a remote flag, full-text search the titles, sort by date, and paginate. Your front end — a static site, a Next.js app, or a Framer site — renders the openings.

Launch your board

From a sheet to a live, filterable board in four steps:

  1. 1 List one job per row: title, company, location, remote, salary, and an apply link.
  2. 2 Paste the sheet's share URL into PasteSheet to get a live endpoint — no Google Cloud project.
  3. 3 Fetch the endpoint from your site and wire the filters to URL parameters.
  4. 4 Post a new job by adding a row; close one by deleting it or flipping a status cell.

Filter openings over the API

The role, location, and remote filters your board offers are just URL parameters — combine them with search, sort, and pagination:

terminal
curl "https://pastesheet.com/your-endpoint/Jobs?remote=true&contains[role]=engineer&sort=-posted"

{
  "data": [
    {
      "role": "Senior Backend Engineer",
      "company": "Acme",
      "location": "Remote (US)",
      "remote": true,
      "posted": "2026-07-10",
      "apply_url": "https://acme.com/jobs/be-eng"
    }
  ]
}

Safe to publish, nothing to wire up

Because the endpoint is read-only by design, it is safe to expose publicly or hand to a teammate: consumers can read and query the data but can never change the sheet. And there is no Google Cloud project, OAuth screen, or service account to set up — you paste a share URL and get a live API.

What it costs

Starter

For indie makers shipping a real app.

$9 /mo
Endpoints
10
Requests / mo
50,000
Row cap
5,000
  • Full-text search
  • Private endpoints & keys
  • Schema-change alerts

MCP is included on the Free plan. Connect any public endpoint over MCP with no Google Cloud project and no credit card. Private endpoints and the account-wide workspace server need a paid plan (from Starter ($9/mo)) for the keys and OAuth they authenticate with.

Pro adds full-text search and aggregation (count, sum, avg, group_by) that your AI agent can call through query_rows.

Frequently asked questions

How do candidates filter jobs?

Your front end maps each filter to a URL parameter: ?remote=true for the remote toggle, ?location=Berlin or contains[role]=design for role and location, and search= for a keyword box across the listing. Sort and pagination are parameters too.

How do employers or I post a new job?

Add a row to the Google Sheet. The new opening appears on the board after the cache refreshes. To close a role, delete the row or flip a status cell — no publishing flow and no deploy.

Can applicants submit through the board?

Not through PasteSheet — it is read-only, so it serves and filters the listings but takes no writes. Point each apply link at your ATS, an email, or a form tool that owns the application submissions.

How current are the listings?

Responses are cached for speed. The Free plan refreshes every 5 minutes; paid plans let you set a custom TTL, so a fresh row goes live within your chosen window rather than on a manual rebuild.

Sources

Related use cases

Turn your sheet into an API in minutes

Paste a Google Sheet URL and get a live REST API and MCP server — no backend, no code, free to start.