> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/speedyapply/JobSpy/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Scrape job postings from multiple job boards in under a minute.

<Steps>
  <Step title="Install JobSpy">
    If you haven't installed JobSpy yet, install it with pip:

    ```bash theme={null}
    pip install -U python-jobspy
    ```

    Python 3.10 or higher is required. See [Installation](/installation) for full details.
  </Step>

  <Step title="Import and call scrape_jobs()">
    Import `scrape_jobs` from the `jobspy` package and run your first search:

    ```python theme={null}
    import csv
    from jobspy import scrape_jobs

    jobs = scrape_jobs(
        site_name=["indeed", "linkedin", "zip_recruiter", "google"],
        search_term="software engineer",
        google_search_term="software engineer jobs near San Francisco, CA since yesterday",
        location="San Francisco, CA",
        results_wanted=20,
        hours_old=72,
        country_indeed="USA",
    )
    ```

    `scrape_jobs()` runs all specified boards concurrently and returns a single Pandas DataFrame.

    <Tip>
      Start with `indeed` — it is currently the best-performing scraper with no rate limiting. LinkedIn is the most restrictive and typically rate limits around the 10th page with a single IP address.
    </Tip>
  </Step>

  <Step title="View results">
    Print a summary and preview the first few rows:

    ```python theme={null}
    print(f"Found {len(jobs)} jobs")
    print(jobs.head())
    ```

    The DataFrame contains the following key columns:

    | Column           | Description                                                         |
    | ---------------- | ------------------------------------------------------------------- |
    | `id`             | Platform-specific job identifier                                    |
    | `site`           | Job board the posting came from (e.g. `indeed`, `linkedin`)         |
    | `job_url`        | URL to the job posting                                              |
    | `job_url_direct` | Direct employer application URL, when available                     |
    | `title`          | Job title                                                           |
    | `company`        | Company name                                                        |
    | `location`       | City, state, and/or country as a display string                     |
    | `date_posted`    | Date the job was posted                                             |
    | `job_type`       | Employment type: `fulltime`, `parttime`, `internship`, `contract`   |
    | `salary_source`  | `direct_data` or `description` (where salary was found)             |
    | `interval`       | Salary pay period: `yearly`, `monthly`, `weekly`, `daily`, `hourly` |
    | `min_amount`     | Minimum salary amount                                               |
    | `max_amount`     | Maximum salary amount                                               |
    | `currency`       | Currency code (e.g. `USD`)                                          |
    | `is_remote`      | Whether the job is remote                                           |
    | `description`    | Full job description (Markdown by default)                          |
  </Step>

  <Step title="Export results">
    Save your results to CSV or Excel for further analysis.

    <CodeGroup>
      ```python export to CSV theme={null}
      import csv

      jobs.to_csv(
          "jobs.csv",
          quoting=csv.QUOTE_NONNUMERIC,
          escapechar="\\",
          index=False,
      )
      ```

      ```python export to Excel theme={null}
      jobs.to_excel("jobs.xlsx", index=False)
      ```
    </CodeGroup>

    <Note>
      Use `quoting=csv.QUOTE_NONNUMERIC` and `escapechar="\\"` when exporting to CSV. Job descriptions often contain commas, quotes, and newlines that will break a plain CSV export.
    </Note>

    <Check>
      Your job results are now saved and ready for filtering, analysis, or loading into a database.
    </Check>
  </Step>
</Steps>

## Complete example

Here is the full working script from start to finish:

```python theme={null}
import csv
from jobspy import scrape_jobs

jobs = scrape_jobs(
    site_name=["indeed", "linkedin", "zip_recruiter", "google"],
    search_term="software engineer",
    google_search_term="software engineer jobs near San Francisco, CA since yesterday",
    location="San Francisco, CA",
    results_wanted=20,
    hours_old=72,
    country_indeed="USA",
)

print(f"Found {len(jobs)} jobs")
print(jobs.head())

# Export to CSV
jobs.to_csv("jobs.csv", quoting=csv.QUOTE_NONNUMERIC, escapechar="\\", index=False)

# Export to Excel
jobs.to_excel("jobs.xlsx", index=False)
```

## Next steps

<CardGroup cols={2}>
  <Card title="scrape_jobs() reference" icon="code" href="/reference/scrape-jobs">
    Full parameter reference for `scrape_jobs()`, including filtering, proxy, and LinkedIn options
  </Card>

  <Card title="Job board guides" icon="briefcase" href="/job-boards/indeed">
    Per-board usage notes, rate limit behavior, and country support
  </Card>
</CardGroup>
