# Running Imports

Once an importer is defined and registered, you can start an import process in several ways, depending on your use case.

# Artisan Commands

Laravel Ingest provides several Artisan commands for managing imports.

# ingest:run

The ingest:run command is perfect for manual or scheduled imports where the source file is accessible on a local or configured filesystem disk.

php artisan ingest:run {slug} {--file=} {--dry-run}
Argument/Option Description
slug The slug of the importer to run (e.g., user-importer)
--file Path to the source file (required for FILESYSTEM sources)
--dry-run Simulate the import without saving data
# Run a product import from a file on the default disk
php artisan ingest:run product-importer --file="imports/products.csv"

# Perform a dry run to check for errors
php artisan ingest:run product-importer --file="imports/products.csv" --dry-run

# ingest:list

List all registered importers and their configurations.

php artisan ingest:list

# ingest:status

Check the status of a specific import run.

php artisan ingest:status {id}
Argument Description
id The ID of the IngestRun to check

# ingest:cancel

Cancel a running import. This will stop processing new chunks but won't roll back already processed rows.

php artisan ingest:cancel {id}
Argument Description
id The ID of the IngestRun to cancel

# ingest:retry

Retry failed rows from a previous import run.

php artisan ingest:retry {id} {--dry-run}
Argument/Option Description
id The ID of the IngestRun to retry
--dry-run Simulate the retry without saving data

# ingest:prune-files

Clean up old temporary and uploaded files to free disk space.

php artisan ingest:prune-files {--hours=24}
Option Default Description
--hours 24 Delete files older than this many hours

This command removes files from the ingest-temp and ingest-uploads directories that are older than the specified number of hours.

# Scheduling File Cleanup

Add to your routes/console.php or scheduler:

// Clean up files older than 24 hours, daily
Schedule::command('ingest:prune-files')->daily();

// Clean up files older than 6 hours, every hour
Schedule::command('ingest:prune-files --hours=6')->hourly();

# Row Log Pruning

To automatically prune old row logs (stored in ingest_rows table), add Laravel's model pruning command to your scheduler:

// In routes/console.php or App\Console\Kernel
Schedule::command('model:prune')->daily();

The retention period is configured via prune_days in config/ingest.php (default: 30 days).


# 2. Via API

Laravel Ingest automatically registers API endpoints to trigger and manage imports. These are ideal for integrations or when providing a user interface for uploads.

# File Uploads (UPLOAD source)

To start an import that uses SourceType::UPLOAD, send a multipart/form-data POST request.

  • Endpoint: POST /api/v1/ingest/upload/{importerSlug}
  • Body: Must contain a file field with the uploaded file. You can also include an optional dry_run field set to 1 or true.
curl -X POST \
  -H "Authorization: Bearer <token>" \
  -F "file=@/path/to/users.csv" \
  -F "dry_run=1" \
  https://myapp.com/api/v1/ingest/upload/user-importer

# Triggering Other Sources (FTP, URL, etc.)

For importers that don't require a file upload (like FTP or URL sources), you can trigger them with a simple POST request.

  • Endpoint: POST /api/v1/ingest/trigger/{importerSlug}
curl -X POST \
  -H "Authorization: Bearer <token>" \
  https://myapp.com/api/v1/ingest/trigger/daily-stock-importer

# 3. Programmatically (Facade)

You can start an import directly from your application code using the Ingest Facade. This is useful for complex workflows, scheduled jobs, or custom controllers.

use LaravelIngest\Facades\Ingest;
use Illuminate\Support\Facades\Auth;

$slug = 'product-importer';
$filePath = 'imports/products.csv'; // Path on a configured disk
$user = Auth::user();

// Start the import
$ingestRun = Ingest::start(
    importer: $slug, 
    payload: $filePath, 
    user: $user,
    isDryRun: false
);

// $ingestRun is the Eloquent model for the newly created run.
echo "Started ingest run with ID: " . $ingestRun->id;