How to scrape jobs data from Freshersworld using the Minexa API
- Minexa.ai

- 22 hours ago
- 5 min read
Every job listing on Freshersworld contains more structured data than it appears to hold at first glance. Behind each card sits a salary range, a relative posting timestamp, a numeric job ID embedded in a CSS class, and a full list of eligible qualifications packed into a single traversable array. Getting all of that out cleanly, at scale, without writing selectors or maintaining parsing logic, is exactly what the Minexa API is built for.
This guide walks through the complete workflow: training a scraper once using the Minexa Chrome extension, then calling the Minexa API programmatically to extract Freshersworld job listings across as many pages as you need.
What you get at the end of this workflow
Before diving into the steps, here is what the final output looks like. Each row in the extracted dataset corresponds to one job listing and contains fields including company name, salary range, experience requirement, posting time, job ID, and a direct link to the detail page. The data is returned as structured JSON and can be exported to Excel or JSON for downstream use.
Here is a sample of two records from a real extraction run on the Hyderabad jobs page:
[
{
"company_name": "Newton School of Technologies",
"experience_range": "0 to 2.5 Years",
"salary_range": "40000 - 50000 Monthly",
"time_posted": "19 days ago",
"job_description": "Apply to Operations Associate Jobs in Newton School of T...",
"job_link": "https://www.freshersworld.com/jobs/operations-associate-...",
"job_id": "2907186",
"apply_button_class": "view-apply-button view-apply-button-2907186"
},
{
"company_name": "SOFAC E-SYSTEMS",
"experience_range": "0 to 2 Years",
"salary_range": "18000 - 20000 Monthly",
"time_posted": "24 days ago",
"job_description": "Apply to Trainee Engineer Jobs in SOFAC E-SYSTEMS, Hyder...",
"job_link": "https://www.freshersworld.com/jobs/trainee-engineer-jobs-...",
"job_id": "2903855",
"apply_button_class": "view-apply-button view-apply-button-2903855"
}
]Notice that the apply_button_class field encodes the numeric job ID directly within the CSS class string. This means you can extract a job-level identifier purely from the class attribute without needing to parse the job_id field separately, which is useful when building deduplication logic or tracking listing changes over time.
The job_details field goes further. It returns a structured array of typed objects per listing card, encoding the badge label (such as HOT JOB or FEATURED JOB), full job title, company name, location strings, experience range, salary, eligible qualifications with their specialization labels, a truncated description snippet, the posting timestamp, save button DOM identifiers including the data-job-id attribute and save index, and the detail page href. All of this comes from a single field per row, giving you a complete picture of each listing without needing to join multiple fields.
The posted_time field surfaces a relative timestamp string such as "19 days ago" or "18 hours ago", reflecting how recently the listing was published at the time of extraction. This is distinct from an absolute date and is useful for freshness filtering when you want to prioritize recently posted roles.
Step 1: Open the target page and launch the extension
The first thing you need is a trained scraper. Navigate to the Freshersworld jobs listing page you want to extract from. The starting URL used here is freshersworld.com/jobs-in-hyderabad/999903705. Once the page has loaded, open the Minexa Chrome extension.
After the extension opens, you will see a prompt confirming you are on the right page. Click the confirmation button to proceed. This tells Minexa to begin analyzing the current page structure.
Step 2: Confirm pagination and choose your scraping mode
The extension detects pagination controls on the page and displays them for review. You can confirm whether the next-page button has been identified correctly before continuing. This step matters because the scraper configuration you create here will define how the API handles multi-page extraction when you run it programmatically later.
After confirming pagination, the extension asks whether you want to scrape a single list page or a list combined with linked detail pages. For this workflow, selecting the list-only option is sufficient to capture all the fields described above from the listing cards directly.
Step 3: Select the data container and create the scraper
The result of this step is a reusable scraper with a stable ID that you will reference in every API call. Choose the simple scraping scenario, then hover over the page until the full listing container is highlighted. This is the parent element wrapping all job cards, not an individual field. Minexa automatically discovers all data points within it once you confirm.
After selecting the container and clicking Create Scraper, all extracted columns become visible in the extension panel. You can navigate between them using the prev and next controls to verify the fields before proceeding.
Step 4: Get the API request and run extraction at scale
Clicking API Request in the top right of the extension reveals the pre-generated Python code for your scraper. Copy it, update the URLs list with the Freshersworld pages you want to process, and run it. The scraper ID is already embedded in the generated code.
Here is the core request structure. Replace the scraper_id with the one generated for your Freshersworld scraper, and populate the urls array with the pages you want to extract:
import requests
url = "https://api.minexa.ai/data/"
api_key = "YOUR_API_KEY"
data = {
"batches": [
{
"scraper_id": 6183,
"columns": ["top_40"],
"urls": [
"https://www.freshersworld.com/jobs-in-hyderabad/999903705",
"https://www.freshersworld.com/jobs-in-hyderabad/999903705?page=2"
],
"scraping": {
"js_render": True,
"timeout": 30,
"js_code": [
{"wait_time": 2},
{"page_init": True},
{"wait_time": 4}
],
"proxy": "verified",
"retry": 3
}
}
],
"threads": 5
}
headers = {"Content-Type": "application/json", "api-key": api_key}
response = requests.post(url, json=data, headers=headers)
print(response.json())The columns parameter set to "top_40" tells Minexa to return the top 40 ranked fields from the scraper. You can switch this to a named list of specific columns once you know which fields your pipeline needs. Both approaches cost the same and return the same underlying data.
Once the scraper is created, it can be reused across thousands of structurally similar Freshersworld pages without any modification. The training step is a one-time cost. If Freshersworld updates its page layout substantially, you retrain the scraper in the same 2 to 5 minutes and update the scraper_id in your request body.
Get started with the Minexa API and run your first Freshersworld extraction today.
Viewing and exporting results
After the job runs, the extracted data appears in a table view inside the Minexa dashboard. Each row corresponds to one listing card. From there you can export to Excel or JSON depending on how your pipeline consumes the data.
The full Python script available from the extension handles pagination across the API response automatically, writes checkpoint files to JSON, CSV, and Excel at each iteration, and continues until all results are collected. It is ready to run without modification beyond adding your API key and target URLs.
If you are building a recurring pipeline to monitor new job postings on Freshersworld, you can set up your own cron job to call the API on a schedule, passing updated URL lists each time. The scraper ID stays the same across runs as long as the page structure has not changed.
For the full API reference and additional scraping configuration options, visit the Minexa API documentation.
If you are also working with other job boards, the post on how to scrape jobs data from Apna using the Minexa API covers a similar workflow with a different site structure and is worth reading alongside this one.

Comments