# Load job postings data into Google Sheets

> Import job posts into Google Sheets with a short Apps Script and refresh them automatically on a timer.

Page: https://jobdataapi.com/integrations/google-sheets/
Category: Spreadsheets and no-code
You need: A Google Sheet with a tab named Jobs and a jobdata API key (https://jobdataapi.com/accounts/pricing/).

## Steps

1. Open Extensions &rarr; Apps Script in your sheet and paste the script.
2. Set your API key and adjust the filters in the URL.
3. Run importJobs once to authorize, then add a time-driven trigger (e.g. daily).

## Code

```javascript
const API_KEY = 'YOUR_API_KEY';

function importJobs() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Jobs');
  let url = 'https://jobdataapi.com/api/jobs/?title=python&max_age=7&page_size=1000';
  const rows = [['ID', 'Title', 'Company', 'Location', 'Published', 'Remote', 'Apply link']];
  while (url) {
    const response = UrlFetchApp.fetch(url, {
      headers: { Authorization: 'Api-Key ' + API_KEY },
    });
    const data = JSON.parse(response.getContentText());
    data.results.forEach((job) => rows.push([
      job.id, job.title, job.company.name, job.location,
      job.published, job.has_remote, job.application_url,
    ]));
    url = data.next;
  }
  sheet.clearContents();
  sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
```

## Notes

- Keep filters narrow - Sheets is best for a few thousand rows. For bigger feeds use a database or BigQuery.
- The script replaces the tab on every run, so the sheet always mirrors the current filter.

## Related docs

- [Integrating the jobdata API with Excel](https://jobdataapi.com/c/integrating-the-jobdata-api-with-excel/)
- [Jobs API Ingestion Guide: Reliable Historical Backfills and Incremental Syncs](https://jobdataapi.com/c/jobs-api-ingestion-guide-reliable-historical-backfills-and-incremental-syncs/)

