Skip to main content
Kestra is an open-source orchestration platform that runs data pipelines from declarative YAML. The Kestra Meilisearch plugin lets you index documents into Meilisearch as a first-class workflow task, so keeping your search index current becomes an observable, retryable, scheduled job instead of a script you have to babysit.

Why orchestrate the sync

A cron job calling a custom script works right up until it doesn’t: a network blip leaves your index half-updated, nobody notices the job died days ago, and there is no record of what synced when. Kestra makes the sync a first-class workflow. Every run is logged, retried on failure, observable in a UI, and triggered by a schedule or an event. You describe what should happen, and Kestra handles execution, state, and failure.

How the pipelines work

Most guides in this series follow the same arc: a one-shot backfill for the initial load, then an incremental sync that keeps Meilisearch current as data is inserted, updated, and deleted. The Elasticsearch and OpenSearch guides are migrations, pairing the backfill with a safe parallel-run cutover. Three ideas recur throughout:
  • ION is the handoff format. Every Kestra extractor writes ION to internal storage, and the Meilisearch DocumentAdd task reads exactly that. The pipelines are just “extract, convert, index” with no glue code.
  • Upserts are idempotent. DocumentAdd is add-or-replace, so overlapping sync windows and accidental re-runs are always safe.
  • Deletes need explicit handling. DocumentAdd never removes documents. Each guide covers the delete strategy appropriate to its source (soft deletes plus documents/delete-batch, tombstone events, or an index alias swap).
Store credentials as Kestra secrets ({{ secret('NAME') }}), never as plaintext. Inline values in these guides are for readability only.

Guides

Each guide targets a Meilisearch Cloud project (fully managed, nothing to host). You supply your project URL and Default Admin API key.

PostgreSQL

Relational database. Scheduled lookback window on updated_at, soft deletes via delete-batch.

MongoDB

Document database. Scheduled lookback on an updatedAt ISO string, soft deletes via delete-batch.

Amazon S3

Object storage. Event-driven trigger on a prefix with exactly-once processing.

Kafka

Event stream. Real-time trigger, one execution per message.

REST API

HTTP API. A ?updated_since filter with a KV watermark, or a scheduled full re-index.

Elasticsearch

Search engine migration. Scroll the whole index, then cut over with a parallel run.

OpenSearch

Search engine migration. Scroll the whole index, then cut over with a parallel run.

RabbitMQ

AMQP queue. Real-time trigger, one execution per message, delete events routed to delete-batch.

Shopify

E-commerce platform. Native updatedAtMin incremental sync, webhooks for real-time and deletes.