How to Build a Job Portal Like Indeed
Building a job portal like Indeed costs $35,000–$55,000 for a niche MVP (8–10 weeks) or $80,000–$120,000 for a full platform with resume database, employer dashboard, sponsored listings, and alerts (12–16 weeks). The tech stack uses Node.js, React, Elasticsearch for full-text and geo search, PostgreSQL, AWS S3 for resume storage, and Stripe for payments. The hardest problem is search relevance: building a ranking algorithm that combines BM25 scoring, location boost, recency decay, and sponsor multipliers.
Key Takeaways
- A niche job board MVP (post, search, apply) costs $35,000–$55,000 and takes 8–10 weeks. A full portal with resume database, alerts, and employer dashboard costs $80,000–$120,000 over 12–16 weeks.
- Elasticsearch handles full-text job search and geo queries (jobs within X miles). PostgreSQL stores users, jobs, applications, and companies. These two databases do different jobs.
- Resume parsing is harder than it looks. Use a commercial API like Affinda or Sovren instead of building your own parser. They handle varied formats and return structured JSON.
- Google Jobs indexing is free traffic. Adding JSON-LD jobPosting schema to every job listing typically drives 30–40% of job seeker traffic at no ad cost.
- Search relevance is the hardest problem. Start with BM25 scoring plus location boost plus recency decay. Add sponsor multipliers only after the base ranking is solid.
Hiring managers at staffing agencies and industry associations keep running into the same wall. Indeed works for general roles. But when you need nursing staff for rural hospitals, or contract lawyers for a regional firm, or embedded software engineers for automotive clients, the search results are full of noise. The employers you need aren't posting there. The candidates you want aren't searching there. You end up doing the matching manually anyway.
That's why niche job portals get built. Not to beat Indeed at its own game, but to own a corner of the market where the big platforms have weak signal and weak employer relationships.
This guide covers what it actually takes to build one, from the first database schema to the search algorithm that makes the whole thing useful.
What "job portal" actually means to build
A job portal has two user types with different goals. Job seekers want to find and apply to relevant jobs fast. Employers want to post jobs, find qualified candidates, and manage the hiring pipeline without switching between twelve tools.
The product has to serve both sides well, or neither side comes back.
At minimum, a job portal needs: job posting by employers, job search by candidates, application submission, and some form of application tracking. That's the floor. The ceiling includes resume databases, email alerts, sponsored listings, company profile pages, and an employer analytics dashboard.
The complexity isn't in the feature list. It's in getting search relevance right, keeping resume data structured and searchable, and building a monetization model that scales with usage.
Core features to build (MVP vs. full)
MVP scope (8–10 weeks, $35,000–$55,000):
Job listings are the foundation. Employers post a job with title, description, requirements, salary range, location, remote or on-site preference, job type (full-time, contract, part-time), and application deadline. Each listing gets a clean URL and a detail page.
Job search needs to cover the basics: full-text search across titles and descriptions, filters for location, salary range, job type, and date posted. Radius search, where candidates search for jobs within 25 miles of their ZIP code, is a near-universal requirement. Without it, you're not actually solving the location problem.
Candidate profiles let job seekers upload a resume, fill in work history and skills, and track which jobs they've applied to. Even a simple profile improves application quality because employers get structured data instead of a raw PDF.
Application flow should support one-click apply with a saved profile and a per-job custom form for employers who need specific answers (years of experience, willingness to relocate, availability date).
Full platform (12–16 weeks, $80,000–$120,000):
Add the employer dashboard: a pipeline view of all applicants per job, filters to sort by experience or location, saved candidate lists, and direct messaging.
Add the resume database: employers can search all candidates on the platform, not just those who applied to their specific jobs. This is where the real monetization lives. Charge per contact or by monthly subscription.
Add job alerts: candidates set keyword and location preferences, and the system sends a daily or weekly email digest of matching new jobs. This drives repeat engagement without requiring candidates to come back and search.
Add company profile pages: employer branding with logo, description, culture notes, benefits, and a list of open jobs. Employers with stronger profiles get better application rates.
Add sponsored listings: employers pay to promote their jobs above organic results. Charge per click, the same model Indeed uses. $0.10–$5.00 per click depending on the role and competition.
The tech stack
The core stack for a job portal that can scale to a million listings without falling over:
Node.js for the backend API. Fast, well-supported, and has mature libraries for everything a job portal needs: file handling, background jobs, email, payments.
React for the frontend. The job search UI needs real-time filter updates without full page reloads. React handles this cleanly.
Elasticsearch for job and candidate search. Full-text search across job descriptions, geo queries for location-based results, and relevance scoring all live here. PostgreSQL can handle basic search at low volume, but it will struggle once you hit tens of thousands of jobs with complex filter combinations.
PostgreSQL as the main database. Users, companies, jobs, applications, saved searches, payments. Structured, relational data that Elasticsearch doesn't need to own.
AWS S3 for resume storage. Resumes are PDFs. Store them in object storage with access controls. Don't put binary files in a relational database.
Stripe for payment processing. Sponsored listing pay-per-click and resume database subscriptions both go through Stripe. The billing logic is more complex than it looks: you're metering clicks, not just charging a flat monthly fee.
SendGrid for transactional email. Application confirmations, job alerts, employer notifications, password resets.
Redis for session management and rate limiting. Also used as a queue broker for background jobs (email digest generation, resume parsing jobs).
Bull for background job processing. Email digests go out at scheduled times, not in real-time. Resume parsing runs asynchronously after upload.
How long it takes and what it costs
Job posting, full-text search with location filters, candidate apply flow, basic employer dashboard
Resume database with employer search, sponsored listings, job alerts, company profile pages, analytics dashboard
The jump from MVP to full platform is mostly driven by two things: the resume database (which requires parsing infrastructure, candidate search, and a contact/subscription billing model) and sponsored listings (which require per-click metering, budget caps, and a billing reconciliation system).
If you're an industry association building a member-exclusive job board, the MVP scope is usually enough. If you're a staffing agency building a proprietary candidate database as a competitive advantage, you need the full platform.
Ongoing costs after launch: hosting runs $300–$800/month on AWS, Elasticsearch adds $150–$400/month depending on index size, and SendGrid is free up to 100 emails/day then $20–$80/month at typical volumes.
The hardest technical challenge
Search relevance. This is where most job portals fail.
The problem isn't surfacing results. Elasticsearch will return something for any query. The problem is ranking results so the most relevant jobs appear first. A candidate searching "software engineer San Francisco" should see senior roles at real companies near San Francisco, not junior roles across the country with "San Francisco" mentioned once in the description.
Indeed's search ranks results by four signals: recency (newer jobs rank higher by default), employer bid (sponsored jobs get a boost proportional to their bid), candidate match (title similarity, location proximity, skill overlap), and quality signals (employers with complete profiles and good application completion rates rank better).
You won't build all four of these in the first version. Here's the sequence that works:
Start with BM25 scoring in Elasticsearch. BM25 is the default relevance algorithm and handles keyword matching well. It down-weights terms that appear in every document (like "experience" and "responsible for") and up-weights terms that appear in few documents but match the query.
Add location boost. If a candidate searches for "nurse Boston," jobs in Boston should rank above jobs in Dallas even if both are equally keyword-relevant. Elasticsearch's function score query applies a distance-based multiplier. Jobs within 10 miles of the search location get the highest boost; the boost decays with distance.
Add recency decay. A job posted 90 days ago is less likely to be active than one posted 3 days ago. Add a time-based decay function so older postings rank lower by default. Candidates can always sort by date posted if they want.
Add sponsor boost after the base ranking is solid. Sponsored jobs get a multiplier based on the employer's bid. The multiplier must be capped so a high bid doesn't push a completely irrelevant job to the top of results for an unrelated query. Search quality matters more than monetization in the short term. If candidates stop trusting the results, they stop using the platform.
Build vs. Indeed: when custom wins
Build a custom job portal when you're serving a vertical where the big platforms have weak signal. Healthcare job boards, legal job boards, construction job boards, agricultural job boards. The candidates and employers in these spaces aren't active on general platforms, and the niche-specific terminology (nursing license types, bar admission, OSHA certifications) requires filters that Indeed doesn't offer.
Build when you're an organization with an existing community. An industry association with 10,000 member companies has a captive employer base. A staffing agency with a 50,000-candidate database has a captive supply side. You already have both sides of the marketplace. The platform makes the existing relationship more efficient.
Build when geography is the product. A city-specific job board that covers local employers who don't post nationally. A country-specific board for markets where Indeed has no employer relationships.
Don't build a general-purpose job board. Indeed has over 300 million resumes and millions of daily job postings. LinkedIn has 1 billion members. ZipRecruiter has deep integration with ATS platforms that send jobs automatically. You cannot match their content volume or distribution. General competition on their turf is not a winning strategy.
How RaftLabs can help
We've built search-heavy platforms, two-sided marketplaces, and data-intensive applications for companies from seed stage to enterprise. A job portal sits at the intersection of all three.
The specific challenges here, full-text search with geo ranking, resume parsing infrastructure, pay-per-click billing, and background job processing for email alerts, are the kind of problems we've solved before. We don't need to figure out the architecture from scratch, which saves weeks.
Our typical engagement starts with a 2-week discovery sprint where we define scope, make stack decisions, and produce a weekly milestone plan. Then we build. You get a demo every Friday so there are no surprises at delivery.
For a niche job board MVP, budget $35,000–$55,000 and 8–10 weeks. For a full portal, budget $80,000–$120,000 and 12–16 weeks. If your scope falls somewhere in the middle, tell us what you're building and we'll scope it precisely.
Internal links worth reading: Build vs. buy software, SaaS app development cost, and how to build an app like Glassdoor if reviews and employer branding are part of your model.
Frequently asked questions
- A niche job board MVP with job posting, search, and apply functionality costs $35,000–$55,000 and takes 8–10 weeks. A full job portal with resume database, employer dashboard, sponsored listings, job alerts, and company pages costs $80,000–$120,000 and takes 12–16 weeks. Cost scales with search complexity, the number of user roles (employer vs. candidate), and monetization features like pay-per-click sponsored listings.
- Use Elasticsearch for job and candidate search. It handles full-text queries across job titles and descriptions, geo queries (jobs within 25 miles of a ZIP code), and relevance ranking out of the box. Use PostgreSQL for structured data: users, companies, applications, saved jobs, and payment records. The two systems complement each other — Elasticsearch for search, PostgreSQL as the source of truth.
- Resume parsing converts a PDF upload into structured data: name, contact info, work history with dates, education, and skills. Building a reliable parser from scratch is a multi-month project because resume formats vary wildly. Use a commercial API instead. Affinda, Sovren, and Textkernel all return structured JSON from uploaded PDFs with high accuracy. Budget $0.10–$0.50 per resume parsed depending on the provider and volume.
- Add JSON-LD structured data with the jobPosting schema to every job detail page. Required fields are: title, description, hiringOrganization (name and logo), jobLocation, datePosted, and validThrough. Optional but recommended: baseSalary and employmentType. Google indexes these automatically. No submission needed. This typically accounts for 30–40% of job seeker traffic and costs nothing beyond the development time to add the schema.
- Build a custom job portal when you have a specific vertical (nursing jobs, legal jobs, developer jobs) where Indeed's general search surfaces too many irrelevant results, or when you need employer relationships and data that the big platforms don't have. Don't build a general-purpose job board competing with Indeed, LinkedIn, and ZipRecruiter on broad queries. The content volume and network effects are too large to overcome.
Ask an AI
Get an instant summary of this post from your preferred AI assistant.



