UK Visa Sponsor Search
The official UK sponsor register ships as an unwieldy 125,000-row CSV. UK Visa Sponsor Search turns it into an instant, SEO-first web app where anyone can check whether a company sponsors Skilled Worker, Health & Care, or other work visas.
Built with
The problem#
The UK Home Office publishes the Register of Licensed Sponsors, the authoritative list of employers allowed to sponsor work visas, as a flat CSV of more than 125,000 rows. It is refreshed regularly but is effectively unusable in raw form: you cannot search it, filter it, or deep-link to a company. UK Visa Sponsor Search rebuilds that dataset as a fast, SEO-first product.
Architecture#
A single Next.js 16 App Router codebase (React 19, TypeScript in strict mode) that colocates the API routes, the rendered pages, and the data-ingestion pipeline.
src/
app/
api/ search, autocomplete, check, export, stats, sponsors, admin/ingest
cities/[slug]/ dynamic city pages
counties/[slug]/
routes/[slug]/ visa-route pages
sponsors/[slug]/ individual sponsor pages
sitemap.ts / robots.ts
components/ layout, search, seo, sponsors, ui (shadcn)
hooks/ useDebounce, useBookmarks
lib/
db/ Mongoose connection + Sponsor model
ingestion/ fetch -> parse -> transform -> load
types/sponsor.tsData ingestion pipeline#
The register stays current through a four-stage pipeline in lib/ingestion, triggered by npm run ingest or a protected POST /api/admin/ingest route (guarded by an ADMIN_API_KEY) and scheduled with GitHub Actions:
- Fetch the official GOV.UK CSV.
- Parse it into structured records.
- Transform: normalise locations, deduplicate, and generate URL-safe slugs for every sponsor, city, county, and visa route.
- Load: upsert into MongoDB Atlas.
Search and data model#
Sponsor documents (name, visa routes such as Skilled Worker and Health & Care, city, county, sponsor type, rating) live in MongoDB Atlas via Mongoose 9, with text indexes on the searchable fields.
GET /api/searchruns full-text search with filters for visa route, city, county, and sponsor type.GET /api/autocompletereturns type-ahead suggestions, debounced on the client with auseDebouncehook to keep request volume down.GET /api/checkverifies in a single call whether a given company sponsors visas.GET /api/exportstreams the current filtered result set as CSV.GET /api/statsaggregates register-wide totals and breakdowns.
Rendering and SEO#
City, county, and route pages are statically generated, while individual sponsor pages use dynamic [slug] routes, all server-rendered for crawlability. SEO is treated as a first-class feature: sitemap.ts emits entries for every sponsor and category page, JSON-LD BreadcrumbList data and breadcrumb navigation ship on each page, and Open Graph metadata is composed in the root layout.
Stack and deployment#
Next.js 16, React 19, TypeScript (strict), MongoDB Atlas with Mongoose 9, Tailwind CSS v4 with shadcn/ui, and Framer Motion. The UI adapts from tables on desktop to cards on mobile. Deployed on Railway with a GitHub Actions CI/CD workflow; configuration lives in railway.toml, and secrets (MONGODB_URI, ADMIN_API_KEY, NEXT_PUBLIC_APP_URL) are injected per environment.
More projects
UK Visa Sponsor MCP Server
An MCP server that lets AI assistants search the UK Register of Licensed Visa Sponsors: check sponsorship, filter by route, and pull stats in natural language.
Python · FastMCP · Docker
Adzuna Job Search MCP Server
A FastMCP server that gives AI assistants live job-market data: search roles, analyze salaries, and research employers across 12 countries.
Python · FastMCP · Adzuna API · Docker · PyPI · GitHub Actions
OpenFocus: AI Study Agent
An AI study companion that blends smart scheduling, task management, and personalised tutoring: five AI agents, each with its own teaching style.
React 18 · TypeScript · Vite · React Router v7 · Tailwind CSS v4 · Zustand · Motion · Python · Railway