Your waypoint to a UK sponsored role.
Landed is a free, open source platform that helps international students in the UK find visa-sponsored employment.
No login required. No paywalls. No coaching fees.
The UK Home Office publishes a register of every licensed visa sponsor, over 120,000 employers. It is a public CSV file with no search, no context, and no way to tell whether a company actively sponsors or just holds a dormant licence.
Paid coaches charge £500 to £2,000 to systematise this information for job seekers. Landed makes it free.
Employer database - Every A-rated UK Skilled Worker sponsor with Certificate of Sponsorship counts. See who is actively sponsoring versus who just holds a dormant licence.
Phase-aware job search - Graduate Visa holders browse any relevant role with a hidden sponsor signal. Those hunting for sponsorship see only confirmed sponsors.
Employer profiles - One page per sponsor answering "Does [Company] sponsor visas UK?" Publicly indexed, no login required.
Salary Threshold Checker - Calculates the Skilled Worker minimum salary for any role by SOC code, with interview guidance anchored to the visa floor.
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, TypeScript (strict), Tailwind CSS v4, shadcn/ui |
| Database | Supabase (PostgreSQL), Drizzle ORM |
| Pipeline | Python 3.12, pandas, rapidfuzz, GitHub Actions |
| Hosting | Vercel Hobby |
| Monitoring | Sentry, Uptime Robot, Vercel Web Analytics |
Employer-first data model - The database is anchored to verified employers from the Home Office register. Job listings attach to employer profiles, not the other way round. This guarantees sponsorship accuracy and produces SEO-valuable employer profile pages that competitors gate behind logins.
All external API calls happen in GitHub Actions, never at request time - The Home Office register, Companies House, Reed, jobs.ac.uk, and NHS Jobs are all called in scheduled pipelines. Results are cached in Supabase. If any external service goes down, cached data still serves. User-facing latency is always just a database query.
Three-layer pipeline validation - Before processing the Home Office CSV, the pipeline checks: (1) has the GOV.UK metadata timestamp changed since last run? (2) has the file hash changed? (3) does the file pass structural validation? If any check fails, the pipeline exits without touching the database.
Row Level Security at the database layer - Access control is enforced by Postgres RLS policies, not just application code. The anon role can read public tables. Authenticated users can only access their own rows. The pipeline uses a service role key that bypasses RLS and exists only in GitHub Actions secrets, never in client code.
GIN index for fuzzy employer search - pg_trgm with a GIN index enables "Deloitt" to match "Deloitte LLP" by breaking names into trigram chunks. GIN was chosen over GiST because searches happen continuously while pipeline writes happen once daily.
GOV.UK Content API -> change detection -> Home Office CSV download
|
Three-layer validation (timestamp, hash, structure)
|
Upsert into employer_profiles (normalised_name dedup key)
|
Companies House API enrichment -> canonical name, company number
|
rapidfuzz entity resolution for unmatched names (>=85 score = match)
|
Reed API + jobs.ac.uk RSS + NHS Jobs API -> jobs table
|
pipeline_sync_log audit entry (success | skipped | error)
See docs/erd.png for the full entity relationship diagram.
Key design decisions:
- Salary figures stored in pence (integer) to avoid floating point precision errors
is_register_activeinstead of deletion so profiles persist when employers leave the registerlisting_sourceconstrained by CHECK constraint at the database level so invalid sources are rejected regardless of where the write originatesON DELETE CASCADEon all child tables so account deletion cleans up all user data automatically, satisfying UK GDPR right to erasure
# Clone and install
git clone https://github.com/your-username/landed.git
cd landed
npm install
# Set up environment variables
cp .env.example .env.local
# Fill in your Supabase credentials
# Run the development server
npm run devVisit http://localhost:3000.
npm run dev # Start development server
npm run build # Production build
npm run type-check # TypeScript type checking
npm run lint # ESLint
npm run format # Prettier| Source | What it provides | Access |
|---|---|---|
| Home Office Sponsor Register | Licensed sponsors, CoS counts, visa routes | Public CSV |
| Companies House API | Canonical company names, company numbers | Free, 600 req/5min |
| Reed Jobseeker API | Private sector job listings | Free, 1,000 req/day |
| jobs.ac.uk RSS | University and academic roles | Public RSS |
| NHS Jobs API | NHS Trust roles | Public API |
| GOV.UK Salary Thresholds | Skilled Worker minimums by SOC code | Public data |
This platform provides general information only and does not constitute immigration advice. For advice specific to your situation, consult an IAA-registered adviser.
Home Office data and Companies House data are published under the Open Government Licence.
Licensed under AGPL-3.0. Pull requests welcome.
If you run a modified version of Landed as a web service, the AGPL requires you to make your modified source code available under the same licence.