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

# Import a CSV

> Bulk-import job listings from any CSV file — AI automatically maps your columns to the right fields.

Kardow's AI-powered CSV import reads your column headers and sample data to automatically map every column to the correct job field. **No manual mapping required** — your column names can be anything.

<Card title="Download CSV Template" icon="file-csv" href="https://jeorvdjgxlatuthhpoqi.supabase.co/storage/v1/object/public/storage/template_kardow_csv_import.csv">
  Download our pre-built template to get started quickly.
</Card>

## Supported Fields

The importer can recognise and map the following job fields. Your CSV columns don't need to match these names exactly — AI figures it out from context.

| Field              | Description                                                               | Required |
| ------------------ | ------------------------------------------------------------------------- | -------- |
| `title`            | Job title / position name                                                 | **Yes**  |
| `company_name`     | Employer / company name                                                   | **Yes**  |
| `description`      | Full job description (HTML and plain text supported)                      | No       |
| `location`         | City, region, or address                                                  | No       |
| `job_type`         | `full-time`, `part-time`, `contract`, `internship`, `temporary`, `casual` | No       |
| `salary_min`       | Minimum salary (number)                                                   | No       |
| `salary_max`       | Maximum salary (number)                                                   | No       |
| `salary_currency`  | ISO currency code, e.g. `USD`, `EUR`, `GBP`, `CAD`                        | No       |
| `salary_period`    | `hourly`, `daily`, `weekly`, `monthly`, `yearly`                          | No       |
| `is_remote`        | Remote flag — `true`/`false`, `yes`/`no`, `1`/`0`                         | No       |
| `how_to_apply`     | Application URL, email address, or phone number                           | No       |
| `company_website`  | Employer website URL                                                      | No       |
| `company_logo_url` | URL to the company logo image                                             | No       |
| `contact_email`    | Recruiter or contact email                                                | No       |
| `meta_title`       | SEO page title                                                            | No       |
| `meta_description` | SEO meta description                                                      | No       |
| `created_at`       | Publication date (any readable date format)                               | No       |
| `expires_at`       | Expiry date (any readable date format)                                    | No       |
| `status`           | `draft` or `active`                                                       | No       |
| `is_highlighted`   | Featured/highlighted flag                                                 | No       |
| `is_sticky`        | Sticky/pinned flag                                                        | No       |

<Note>
  Every row **must** have a non-empty `title` and `company_name` (or their equivalents). Rows missing either field are skipped automatically.
</Note>

### Example CSV

```csv theme={null}
title,description,company_name,location,job_type,salary_period,salary_min,salary_max,salary_currency,is_remote,how_to_apply,created_at,expires_at
"Senior Software Engineer","We are looking for a senior software engineer with 5+ years of experience in React and Node.js.","Acme Corp","Remote","full-time","yearly",80000,120000,"USD",true,"https://acme.com/apply","2025-01-01","2025-03-31"
"Marketing Manager","Lead our marketing team and drive growth initiatives.","Acme Corp","New York, NY","full-time","yearly",70000,90000,"USD",false,"jobs@acme.com","2025-01-05","2025-04-05"
```

### Column names don't have to match

Because AI maps your columns intelligently, these all work as the job title column:

* `title`, `position`, `role`, `job title`, `opening`, `vacancy`

And these all work as the apply URL / email:

* `how_to_apply`, `apply_url`, `apply link`, `application url`, `apply here`

## How to Import

<Steps>
  <Step title="Open the Import dialog">
    1. Log in to your Kardow dashboard
    2. Navigate to the **Jobs** section
    3. Click the **Add Jobs** dropdown and choose **Import CSV**
  </Step>

  <Step title="Upload your file">
    Drag and drop your `.csv` or `.txt` file onto the upload zone, or click **Choose file** to browse.
    Files up to **1 MB** (\~5,000 rows) are supported.
  </Step>

  <Step title="Set default expiry days (optional)">
    If your CSV does not include an `expires_at` column, all imported jobs will expire after the number of days you set here (default: 30 days).
  </Step>

  <Step title="Click Import Jobs">
    That's it. AI reads your headers and the first few rows, maps every column, and bulk-imports all valid jobs. You'll see a success message with the number of jobs imported and any rows that were skipped.
  </Step>

  <Step title="Review imported jobs">
    Your new jobs appear in the **Jobs** list immediately. If your organisation requires approval, they will have **Pending** status and can be published from the dashboard.
  </Step>
</Steps>

<Success>
  Your jobs are imported. No mapping, no clicking through dropdowns — just drag, drop, and done.
</Success>

## Troubleshooting

| Problem                 | Fix                                                                                                                                                  |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| "No valid jobs found"   | Every row needs at least a title and a company name. Check that those columns have values.                                                           |
| Some rows skipped       | Rows where title or company name is blank are skipped automatically.                                                                                 |
| Wrong job type imported | Make sure values are one of: `full-time`, `part-time`, `contract`, `internship`, `temporary`, `casual`. Other values default to `full-time`.         |
| Dates look wrong        | Any standard date format works (`2025-03-31`, `March 31 2025`, `31/03/2025`). Ensure dates are not stored as numbers in Excel — export as CSV first. |
| File too large          | Split your CSV into chunks under 1 MB, or contact support for a bulk migration.                                                                      |

<Note>
  Need help? Contact our support team for assistance with your CSV import.
</Note>
