
An Actor is a hosted program that collects public data. The Naukri Jobs Scraper is the Actor here. It reads public Naukri pages. It does not use a Naukri login. You start it through Apify. An API is a way for one program to ask another program to work. This Actor is reached through Apify's API. It is not an official Naukri API. It is not every job in India. It is not a private company database.
A Task is a saved set of inputs. The current Task is Naukri Jobs by Experience Level Dataset. A Task only starts the search. The Actor saves source rows. You do the review in this article. The Actor does not decide if you fit. It does not send an application.
A row is one saved job record. A possible match means the row passed the checks you can do here. It does not mean you will get an interview.
People who are early in their work ask how their years fit a role. One public example is this question from a recent data science graduate. This article answers only the experience-range step. Learning new skills is a separate task.
Step 1. Write your year rule
Write one sentence for your experience question. State your relevant finished years. Relevant years means years in the work you will use for this role.
Say how you count internships. Say how you count projects. Say how you count part-time work. Say how you count jobs that cover the same dates. Do not add those overlap jobs into one longer total unless the employer says to do that. If the employer states a counting rule, use that rule.
This review answers one fit step. It is not a full plan to learn skills.
Keep your stated years for the table. The search field takes a whole number from 0 through 30. In the fiction later, the search value is 1. The table uses 1.0. If your stated years are not a whole number, do not change the table to force a fit.
Step 2. Start a small search
Choose one role family. Choose the Indian market you want. Choose a short time window.
The current Actor accepts these inputs. `searchTerm` takes one search phrase on each line. Use one line for the first check. `location` is optional. `maxItems` is the most rows the Actor may save for the whole search. If you leave `maxItems` out, that save limit is gone. Always set a save limit. `postedWithinDays` is text. The allowed values are "0", "1", "3", "7", "15", and "30". The value "0" means any age. `experienceYears` is a whole number from 0 through 30. The value 0 asks for the fresher search setting. Fresher here means the source setting for no years of experience. `sortBy` can be relevance or date. `searchDepth` can be standard, extended, or deep. Standard means the narrow first check. This method uses standard. It does not need a wider depth. The Actor also accepts `excludeCompanies`. This review does not use that field to judge years.
The saved Task searches for software engineer. It uses `experienceYears` 5, `postedWithinDays` "7", `sortBy` date, and `searchDepth` standard. It does not set a city. It does not set `maxItems`. Replace the role with your role. Add your city only if you want that market. Replace 5 with your whole number. Set `maxItems` to 2.
Use an input like this for the first check. The role, city, and year number are placeholders. Put in your own values. Remove `location` if you do not want a city limit. Use 0 for the fresher setting.
{
"searchTerm": "your role",
"location": "your city",
"maxItems": 2,
"postedWithinDays": "7",
"experienceYears": 1,
"sortBy": "date",
"searchDepth": "standard"
}Keep the quotes around `postedWithinDays`. The Actor expects text, not a bare number.
A checked example search used a different input. It used one phrase, software engineer. It used no city. It used `postedWithinDays` "0", `maxItems` 2, `sortBy` relevance, and `searchDepth` standard. It did not set `experienceYears`. It saved two different Naukri job IDs. Titles, company names, and places were present. Each row had a direct Naukri `jobUrl`. Each `sourceUrl` matched the asked query. The source was naukri.com. Each row had `observedAt`. Both rows had `descriptionText`. Their `experienceRaw` text also had number ranges 0-5 and 0-2. The search succeeded. It saved two rows. It asked for one page. It saw 20 listings. It had no failed requests. It had no blocked requests. It stopped with `max_items_reached`. That means the save limit was hit. Those two rows are not every matching job. This example did not send `experienceYears`. It does not show that the year filter changed the rows. It does not prove fresher fit.
Step 3. Read the search result
Read the result note before you review years. Keep the filter you sent. Keep the save limit. Keep the reason the search stopped.
An empty result means this search saved no rows. It does not prove that no jobs exist. A blocked result means requests failed or were blocked. Do not treat that gap as a clean zero. A capped result means the save limit was hit. The checked example was capped. Read only the saved rows. Do not call them a full feed.
The year filter can limit what the source returns. It does not replace a reading of each rule. A fresher search can still show a wide range. You still read the listing text.
These fields can help. Some can be absent.
`schemaVersion` names the row shape. It is not a year result. `jobId` is the source job ID. `title`, `companyName`, and `location` name the job. `experienceRaw` is the experience text from the source. `experienceMinYears` and `experienceMaxYears` are parsed numbers. Parsed means the program turned text into numbers. `skills` lists skills when the source shows them. Do not turn skills into a score. `descriptionText` is description text the Actor saved. Its presence does not prove you have every rule. It may not be the full employer text. `postedAt` and `postedAtRaw` are the date text the source showed. `observedAt` is when the Actor recorded the row. These times are not a promise that the job stays open. `jobUrl` is the direct job page. `sourceUrl` is the search page for your query. `searchTerm` and `searchLocation` show what you asked. Make sure they match your role and market. `pageNumber` and `rankOnPage` show place in that search. They are not your chance of being hired. `status` and `statusReason` describe the saved row. Skip a row that is not a normal public listing. `source` should point back to the public page you meant to read.
Dates and experience are what the source showed. They are not a hiring promise.
Step 4. Keep the raw text beside the numbers
Keep `experienceRaw` next to the two parsed numbers. Read the saved description. Then read the public job page.
Separate five cases. A closed range has a low end and a high end, such as 0-2 years. A lower-bound phrase sets only a minimum, such as "1+". An upper-bound phrase sets only a maximum. A missing value means there is no experience evidence. A conflict means the raw text and the parsed numbers do not agree.
Do not fill a missing end with zero. Do not assume the parsed numbers caught every employer rule.
Step 5. Test one range rule
Use a number test only when the raw text and the parsed numbers agree.
For a closed range, test min <= your years <= max. The low end counts as inside. The high end counts as inside. If the test passes, the label is `numeric_range_match`. That label means only that your years sit inside the closed range. It does not mean the employer accepts you.
For a lower-bound phrase, test only your years >= min. Do that only when the raw text shows that rule. A null maximum means no upper number was parsed. Null is not zero.
For an upper-bound phrase, test only your years <= max. Do that only when the raw text shows that rule. Do not invent a minimum of zero.
If the wording is unclear, the label is `needs_review`. If the raw text and the parsed numbers conflict, the label is `needs_review`. If a number is negative, do not use the range. If min is greater than max, the range is reversed. Do not use a reversed range as fit data. A reversed pair, such as min 5 and max 2, is not a test you can pass.
Step 6. Add the other stated conditions
Then read the other experience conditions on the listing. A condition might ask for years in one kind of work. It might ask for a certificate. It might set a minimum for one role.
Keep two labels apart. `numeric_range_match` means the number test only. `employer_requirements_checked` means you read the extra conditions.
Give each extra phrase a class. Required means the employer states it as a must. Preferred means the employer states it as a wish. Unclear means the text does not say which. Do not treat every phrase as required.
You can fit a 0-5 range and still miss a required duty. You can still miss a required certificate. A preferred range may not be a hard stop. Write the class in your notes. A number fit is not employer acceptance.
Step 7. Build a table from six fictional listings
Build a table for your real rows. Use the real job ID and `jobUrl`. Keep raw text, parsed numbers, your years, range state, other evidence, review state, and the next action. Keep unresolved rows in the table. Do not rank rows by a guessed chance. No private score belongs in this table.
The six listings below are original fiction. They are teaching rows. They are not Actor output. They are not real Naukri jobs. They have no live URLs. Do not treat the result as a product run.
The learner in this fiction has 1.0 relevant year. That number follows a counting rule they already wrote. The search field would use the whole number 1. The tests below use 1.0.
J1 shows raw text "0-2 years", min 0, and max 2. The raw text and the numbers agree. The test is 0 <= 1.0 <= 2. That is true, because 1.0 is between the ends. The range state is `numeric_range_match`. This fiction gives J1 no extra failing condition. J1 can stay a possible match. You would still read a live page for a real row, because saved text can be incomplete.
J2 shows raw text "2-4 years", min 2, and max 4. The text and the numbers agree. The test is 2 <= 1.0 <= 4. That is false, because 1.0 is under 2. The range state is `below_range`. J2 is not a possible match. An exact 2.0 would sit on the low end and would pass. This learner does not have 2.0.
J3 shows raw text "0-5 years", min 0, and max 5. The text and the numbers agree. The test is 0 <= 1.0 <= 5. That is true. The range state is `numeric_range_match`. The description also requires two relevant-domain years. Relevant-domain years means years in the named kind of work. This fiction states that rule as required, not preferred. The learner has 1.0, which is under 2. The required condition is not met. J3 is not a possible match. The number fit remains true, and the extra rule still fails.
J4 shows raw text "1+ years", min 1, and max null. The plus phrase shows a lower bound. It does not show a closed range. The test is 1.0 >= 1. That is true. The range state is a lower-bound match. The null maximum is not zero. If you wrote max 0, the false test 1 <= 1.0 <= 0 would drop a real lower-bound fit. Do not do that.
J5 has no experience text. It has no minimum. It has no maximum. The state is unknown. Unknown is not zero. If you wrote 0 and 0, you would invent a test. A fresher might look like an exact fit by accident. A person with 1.0 year might look below the range by accident. There is no evidence, so there is no test. J5 stays unresolved.
J6 shows raw text "3-5 years", but the parsed numbers are min 0 and max 5. Those values do not agree. If you trusted the parsed 0-5, then 1.0 would look like a number fit. If you trusted the raw 3-5, then 1.0 would be below the range. The two tests disagree. The state is `needs_review`. J6 is not a match. Do not choose the nicer range.
| Job | Raw range | Parsed min | Parsed max | Applicant years | Range state | Other condition | Review state | Next action |
|---|---|---|---|---|---|---|---|---|
| J1 | 0-2 years | 0 | 2 | 1.0 | numeric_range_match | none in this fiction | possible match | Read the live job page before you apply |
| J2 | 2-4 years | 2 | 4 | 1.0 | below_range | none in this fiction | not a match | Do not add it from these numbers |
| J3 | 0-5 years | 0 | 5 | 1.0 | numeric_range_match | required: 2 relevant-domain years | condition not met | Keep the number note, but do not call it a match |
| J4 | 1+ years | 1 | null | 1.0 | lower-bound match | none in this fiction | possible match | Read the live job page before you apply |
| J5 | absent | absent | absent | 1.0 | unknown | no evidence | unresolved | Read the source page by hand |
| J6 | 3-5 years | 0 | 5 | 1.0 | conflict | raw text and parsed numbers disagree | needs_review | Do not choose either range |
There are six reviewed listings. J1 and J3 are closed ranges whose raw text and numbers agree, and 1.0 sits inside both. That is two closed-range number fits. J4 is one confirmed lower-bound fit. J2 is below its range. J5 and J6 are unresolved. J5 is unresolved because all experience evidence is missing. J6 is unresolved because the raw text and the parsed numbers disagree.
After the extra required condition, J3 drops out. J1 and J4 remain possible matches. That is two of six in this fiction. Two of six is the result of this made-up review. It is not a rate of jobs that will accept you. It is not a share of Naukri jobs you should expect.
The same fiction at zero years needs a new test. Do not reuse the one-year decisions. At zero years, J1 still fits, because 0 <= 0 <= 2. J2 is still below 2. J3 still fits the closed numbers, because 0 <= 0 <= 5. J3 still fails the required two domain years. J4 fails, because 0 is not >= 1. J5 is still unknown. J6 is still a conflict. In this same fiction, only J1 stays a possible match at zero years. J4 was a possible match at 1.0 year. It is not a possible match at zero.
Step 8. Read one role before you apply
Review the possible matches by hand. Read the employer's current application instructions on the job page. Compare your proof with one role at a time. Choose learning work across roles as a separate task.
This article ends with a range-review list. It does not estimate pay. It does not score skills. It does not promise an interview.
Sources & further reading
By Chronometrica · Updated
Back to top ↑

