
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.
hoststringrequiredFull URL including protocol (https://ms-abc123.meilisearch.io).
api_keystringMaster or admin key. Leave empty if no auth configured.
index_namestringTarget index name. Defaults to "jobs". Auto-created.
searchable_attributesstringComma-separated fields to search across. Clear to leave the index setting untouched.
filterable_attributesstringComma-separated fields to filter and facet on. Keep _jobo_synced_at in the list.
sortable_attributesstringComma-separated fields results can be sorted by. Clear to leave untouched.
{
"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
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.
bashcurl -H "Authorization: Bearer YOUR_MASTER_KEY" \ "https://ms-abc123.meilisearch.io/health" - 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
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
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.
javascriptconst 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.
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.
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.
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.
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.
Other destinations
Start syncing jobs to Meilisearch
Connect the destination, pick your filters, and let the feed run.