> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ingestly.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload and extract

> End-to-end guide to uploading a document and extracting structured data.

This guide walks you through the complete flow: creating a pipeline, configuring its extraction workflow, uploading a document, and retrieving the results.

## Overview

The basic extraction flow is:

1. Create a pipeline with an extraction workflow
2. Upload a document (via dashboard, email, or API)
3. The pipeline processes the document and extracts data
4. Receive results via callback webhook or view them in the UI

## Step 1: Create a pipeline

Go to the [Pipelines page](https://ingestly.ai) and click **New Pipeline**. Give it a descriptive name like "Invoice Extraction".

## Step 2: Build the workflow

In the **Pipeline** tab, add these nodes:

1. **Upload trigger:** to accept documents from the UI
2. **Extract action:** configure with a schema defining the fields you want
3. **Callback output:** to receive results at a webhook URL

Connect them in sequence and click **Save**.

### Example schema

For invoice extraction, you might define:

```json theme={null}
{
  "fields": [
    { "name": "vendor_name", "type": "string", "description": "Name of the vendor or supplier" },
    { "name": "invoice_number", "type": "string", "description": "Invoice or receipt number" },
    { "name": "invoice_date", "type": "date", "description": "Date the invoice was issued" },
    { "name": "total_amount", "type": "number", "description": "Total amount due" },
    { "name": "currency", "type": "string", "description": "Currency code (e.g., USD, EUR)" },
    {
      "name": "line_items",
      "type": "array",
      "description": "Individual line items on the invoice",
      "items": [
        { "name": "description", "type": "string" },
        { "name": "quantity", "type": "number" },
        { "name": "unit_price", "type": "number" },
        { "name": "amount", "type": "number" }
      ]
    }
  ]
}
```

## Step 3: Activate and upload

Click **Activate** to enable the pipeline, then go to the **Documents** tab and upload a document.

## Step 4: View results

Navigate to the **Runs** page to see the processing results. Click the run to inspect each step's output, including the extracted data.

## Using the API

You can also upload documents programmatically using the webhook trigger. First, add a **Webhook trigger** node to your pipeline and [create an API key](/admin/api-keys).

<Snippet file="auth-api-key.mdx" />

The response includes the run ID, which you can use to track processing status. Configure a callback output to receive results automatically when processing completes.

See the [webhook trigger guide](/guides/webhook-trigger) for detailed API examples.
