> Public product help. This page has no customer entries, projects, chat transcripts, API keys, or horizon contents.
> Reading that data requires `Authorization: Bearer` (a signed-in app session JWT, or a Headless access token).
> Do not call Supabase `/rest/v1` with a Headless JWT. Data reads go through `/casc/v1/headless/v1/rest`.

# Schedules and Manual Ingestion

> **Deprecated, still supported:** Existing periodic ingestion schedules continue to run and remain
> visible/editable under **Settings → Schedules (deprecated)**. Prefer
> **Settings → Scheduler** (toolchain schedulers) for new recurring work — see [scheduler](scheduler.md).
> This ingestion-schedule path will be obsolete soon; there is no automatic migration of existing schedules.

Ingestion can run on demand from Horizon or automatically on a timer. Pull sources that support schedules: Google Spreadsheet, Google Drive Folder, and API Source. **Transformation** groups are materialized with the same Horizon **Ingest** action (preview in the editor first).

## Manual ingestion

**Horizon → Data Ingestion** lists groups assigned to your active horizon.

1. Click **Ingest** on a group card.
2. For spreadsheet/folder sources, confirm options (start row, link validation, directory depth) in the dialog if shown.
3. For groups with Deduplication configured, scheduled runs apply Skip / Update / Sync the same as manual Ingest — see [api-ingestion](api-ingestion.md).
4. For **Transformation** groups, Ingest runs the pipeline and writes the destination group — see [transform-ingestion](transform-ingestion.md).
5. Watch progress on the page until the job completes or errors.
6. New rows appear in Data Review unless the group uses auto-approve.

Manual runs use the Google account of the user who clicked Ingest. API runs use configured auth on the group plus system secrets where applicable.

## Periodic ingestion

Configure in either place:

- **Settings → Ingestion** — edit group → **Periodic Ingestion Schedule** section.
- **Settings → Schedules (deprecated)** — dashboard of all groups, notifications, pause/resume, trigger now.

## Schedule fields

| Field | Description |
| --- | --- |
| Period type | `minutes`, `hours`, `days`, `weekly`, `monthly` |
| Period value | Interval count (minimum 5 minutes for minute-based schedules) |
| Start time | Anchor for daily/weekly/monthly patterns |
| Timezone | IANA timezone for schedule evaluation (default UTC) |

## Schedule actions

- **Enable / update** — turn on schedule with chosen period.
- **Disable** — stop future scheduled runs.
- **Pause / Resume** — temporarily halt without deleting config.
- **Trigger now** — run one ingest immediately on the schedule worker.

Notifications for schedule failures appear under Settings → Schedules (ingestion notifications list).

## Manual vs scheduled behavior

| | Manual | Scheduled |
| --- | --- | --- |
| Trigger | User clicks Ingest | Timer or Trigger now |
| Google auth | Clicking user's token | Service uses same per-user model — ensure a service account user or designated operator stays connected |
| Config source | Saved group config | Same saved group config |
| Auto-embed | Runs after ingest if enabled — recommended so search stays current | Same; if off, run Initiate Embedding after scheduled ingest before LLM/search use |

> Scheduled Sheet or API syncs that skip embedding leave new rows invisible to search tools.
> Prefer **Auto-embed**, or treat post-ingest **Initiate Embedding** as part of the operational checklist before agents run.

## When manual is enough

Use manual ingestion for one-off loads, testing column mapping, or groups that change rarely. Use schedules for operational feeds (nightly API sync, hourly sheet updates).
