﻿---
title: stack es helpers bulk-ingest cli command
description: Bulk-ingest documents from file, directory, or stdin with automatic batching, concurrency, and retries. Behaviour flags: --dry-run — validate all inputs...
url: https://www.elastic.co/elastic/docs-builder/docs/4850/reference/elastic-cli/cli/stack/es/helpers/bulk-ingest
applies_to:
  - Elastic Cloud Serverless: Preview
  - Elastic Stack: Preview
---

# stack es helpers bulk-ingest cli command
<cli-modifiers>
</cli-modifiers>

```bash
elastic stack es helpers bulk-ingest --index <index> [options]
```

Bulk-ingest documents from file, directory, or stdin with automatic batching, concurrency, and retries.
**Behaviour flags:**
`--dry-run` — validate all inputs and exit without performing any action

## Options

<definitions>
  <definition term="--index string required">
    Target index
  </definition>
  <definition term="--data-file string">
    Path to data file (NDJSON, JSON array, or CSV)
  </definition>
  <definition term="--data-dir string">
    Path to directory of data files to ingest
  </definition>
  <definition term="--glob string">
    Glob pattern for --data-dir file matching (default: **/*.json, or **/*.csv when --source-format csv)
  </definition>
  <definition term="--no-recursive">
    Do not recurse into subdirectories when using --data-dir
  </definition>
  <definition term="--source-format enum">
    Input file format: csv, or json-based (ndjson vs json array is auto-detected from content; "ndjson" and "json" behave identically here)
    **Values:** ndjson, json, csv
    **Default:** `ndjson`
  </definition>
  <definition term="--csv-delimiter string">
    CSV column delimiter (default: ",")
  </definition>
  <definition term="--csv-columns string">
    Comma-separated list of column names (overrides CSV header row)
  </definition>
  <definition term="--skip-header">
    Skip the first row of a CSV file
  </definition>
  <definition term="--flush-bytes number">
    Batch size threshold in bytes
    **Default:** `5242880`
  </definition>
  <definition term="--concurrency number">
    Number of parallel bulk requests
    **Default:** `5`
  </definition>
  <definition term="--retries number">
    Max retries per failed batch
    **Default:** `3`
  </definition>
  <definition term="--retry-delay number">
    Initial retry delay in ms (doubles each attempt)
    **Default:** `1000`
  </definition>
  <definition term="--pipeline string">
    Ingest pipeline name
  </definition>
  <definition term="--routing string">
    Custom routing value
  </definition>
  <definition term="--input-file string">
    path to a JSON file to use as command input
  </definition>
  <definition term="--dry-run">
    validate all inputs and exit without performing any action (preview changes without applying them)
  </definition>
  <definition term="--no-validate">
    skip input validation and send the request as-is
  </definition>
</definitions>


## Global Options

<definitions>
  <definition term="--output-fields string">
    comma-separated list of fields to include in output (dot-notation supported)
  </definition>
  <definition term="--output-template string">
    Mustache-like template for custom text output (e.g. "{{id}}: {{name}}")
  </definition>
  <definition term="--json">
    output as JSON
  </definition>
</definitions>