Skip to main content
Each job returned by scrape_jobs() is internally represented as a JobPost Pydantic model. When building the output DataFrame, the model fields are flattened and nested objects (such as location and compensation) are expanded into individual columns.

JobPost fields

str | None
Platform-specific job identifier. May be None for some job boards.
str
required
Job title as listed by the employer.
str | None
Name of the hiring company. Maps to the company column in the DataFrame.
str
required
Canonical URL of the job listing on the job board.
str | None
Direct URL to the employer’s own job application page, when available. For LinkedIn, this requires linkedin_fetch_description=True.
Location | None
Structured location of the job. Flattened to a display string in the DataFrame (e.g., "San Francisco, CA, USA").
str | None
Full job description. The format is controlled by the description_format parameter passed to scrape_jobs() — one of "markdown", "html", or "plain".
str | None
URL of the company’s profile page on the job board.
str | None
URL of the company’s own website, when available.
list[JobType] | None
Employment type(s) associated with the posting (e.g., FULL_TIME, CONTRACT). In the DataFrame, this is serialized as a comma-separated string of the primary values (e.g., "fulltime"). See JobType.
Compensation | None
Salary or compensation data. In the DataFrame, this object is expanded into four separate columns: interval, min_amount, max_amount, and currency.
date | None
The date the job was posted, as a Python datetime.date object.
list[str] | None
Email addresses extracted from the job description. In the DataFrame, serialized as a comma-separated string.
bool | None
Whether the job is remote. True for remote, False for on-site, None if not specified.
str | None
The type of listing (e.g., organic vs. sponsored), when available from the job board.
str | None
Seniority or experience level (e.g., "Entry level", "Mid-Senior level"). LinkedIn-specific.
str | None
The industry the company operates in. Available from LinkedIn and Indeed.
str | None
Physical address(es) of the company. Indeed-specific.
str | None
Company headcount range as a string (e.g., "1001-5000 employees"). Indeed-specific.
str | None
Company annual revenue as a string (e.g., "$1B to $5B"). Indeed-specific.
str | None
Short description of the company from its job board profile. Indeed-specific.
URL of the company’s logo image. Indeed-specific.
str | None
URL of the company’s banner photo. Indeed-specific.
str | None
Functional area of the role (e.g., "Engineering", "Product Management"). LinkedIn-specific.
list[str] | None
Skills and technologies listed in the posting. In the DataFrame, serialized as a comma-separated string. Naukri-specific.
str | None
Required years of experience as a range string (e.g., "2-5 Yrs"). Naukri-specific.
float | None
Aggregate company rating from AmbitionBox. Naukri-specific.
int | None
Number of company reviews on AmbitionBox. Naukri-specific.
int | None
Number of open positions for this listing. Naukri-specific.
str | None
Work arrangement type (e.g., "Hybrid", "Remote", "Work from Office"). Naukri-specific.

DataFrame column mapping

The table below maps each JobPost model field to its corresponding column name in the scrape_jobs() output DataFrame.

Example