Search Engine

Meilisearch job data feed

Open-source instant search, cloud or on your own box.

Meilisearch gives you typo-tolerant instant search without a cluster to babysit, and Jobo treats Meilisearch Cloud and a self-hosted binary identically — same fields, same sync. Documents are keyed on the Jobo job ID so the 15-minute incremental sync updates in place, and the searchable, filterable, and sortable attribute lists you configure on the destination are applied to the index on every sync. Being a document destination, it also accepts a transformation pipeline if you want a narrower document than the full canonical job.

Sync
Incremental, every 15 min
Deduplication
Upsert on job ID
Pipelines
Supported
Credentials
AES-256 at rest

Connection configuration

The fields Jobo collects to reach your Meilisearch instance.

hoststringrequired

Full URL including protocol (https://ms-abc123.meilisearch.io).

api_keystring

Master or admin key. Leave empty if no auth configured.

index_namestring

Target index name. Defaults to "jobs". Auto-created.

searchable_attributesstring

Comma-separated fields to search across. Clear to leave the index setting untouched.

filterable_attributesstring

Comma-separated fields to filter and facet on. Keep _jobo_synced_at in the list.

sortable_attributesstring

Comma-separated fields results can be sorted by. Clear to leave untouched.

Meilisearch config
{
  "host": "https://ms-abc123.meilisearch.io",
  "api_key": "••••••••",
  "index_name": "jobs"
}

How to sync jobs to Meilisearch

One-time setup. After this, the feed maintains itself.

  1. 1

    Get the host and a write key

    host is the full URL including protocol — https://ms-abc123.meilisearch.io on Meilisearch Cloud, or something like http://meili.internal:7700 for a self-hosted instance. api_key takes the master key, or an admin key with document and settings permissions. Leave it empty only if the instance genuinely runs without MEILI_MASTER_KEY. Keys are encrypted at rest with AES-256.

    bash
    curl -H "Authorization: Bearer YOUR_MASTER_KEY" \
      "https://ms-abc123.meilisearch.io/health"
  2. 2

    Point the feed at a dedicated index

    index_name defaults to jobs and the index is created on the first push. Force resync deletes and recreates it, so never share the index with an application that writes documents of its own.

  3. 3

    Declare the attribute lists

    searchable_attributes, filterable_attributes, and sortable_attributes are comma-separated field names, and Jobo applies them to the index on each sync. Keep _jobo_synced_at in filterable_attributes: full-resync cleanup removes jobs that vanished upstream by filtering on that stamp, and the delete fails outright if the field is not filterable. Clear a box entirely to leave that setting exactly as it already is in Meilisearch.

    json
    {
      "searchable_attributes": "title,company,description",
      "filterable_attributes": "company,employment_type,_jobo_synced_at",
      "sortable_attributes": "date_posted,salary_max"
    }
  4. 4

    Search it

    Only fields listed in filterable_attributes can be filtered or faceted on, and only those in sortable_attributes can be sorted — querying a field you left out returns an error rather than an empty result set, which makes the lists worth getting right up front.

    javascript
    const results = await client.index('jobs').search('backend engineer', {
      filter: 'employment_type = "full_time"',
      sort: ['date_posted:desc'],
      limit: 20,
    })

Common issues

What actually goes wrong when connecting Meilisearch, and the fix.

high

Removed jobs are never cleaned out of the index.

_jobo_synced_at has been dropped from filterable_attributes. Full-resync cleanup deletes stale documents by filtering on that stamp, and Meilisearch rejects a filter on an undeclared attribute, so nothing is ever removed. Put it back and run a sync.

high

Requests are rejected with 401 or 403.

The key is missing the documents.add or settings.update action. Use the master key, or an admin key scoped to the target index with both document and settings permissions. If the instance really has no auth, leave api_key empty rather than sending a placeholder.

medium

Filtering or sorting on a field returns an attribute-not-filterable error.

Meilisearch only allows those operations on declared attributes. Add the field to filterable_attributes or sortable_attributes and let the next sync push the setting — Meilisearch reindexes on its side, which takes a moment on a large index.

medium

The index is empty and the attribute settings are gone after a force resync.

Force resync deletes and recreates the index. Jobo re-applies the three attribute lists it holds in the destination config on the next sync, but anything you configured directly in Meilisearch — synonyms, stop-words, ranking rules — is yours to restore.

Best practices

  • Keep _jobo_synced_at in filterable_attributes or stale jobs are never removed.
  • Give the feed its own index; force resync deletes and recreates it.
  • Clear an attribute box to leave that index setting untouched rather than guessing at it.
  • Keep searchable_attributes short — every extra field costs index size and relevance.
  • Restore synonyms, stop-words, and ranking rules yourself after a force resync.

Start syncing jobs to Meilisearch

Connect the destination, pick your filters, and let the feed run.