Hosted orchestrator for tasks, workflows, and jobs

A hosted orchestrator. Tasks, workflows, and jobs.

Long-running workflows need retries, queues, error handling, and monitoring β€” that's months of plumbing before you ship a single feature. Durable execution shouldn't require you to manage workers or learn a custom runtime.

You write the tasks, the workflow, or the job in plain code, deploy with one call, and it runs here β€” in Python, TypeScript, Go, JavaScript, or Java. A job can branch, wait, stop, start on a clock, and retry one step. Need AI agents? Built-in ReAct and tool calling are included.

pipeline.py
from graphingest import graph, node

@node(retries=3, timeout=30)
def extract(url: str):
    return fetch_data(url)

@node
def transform(raw_data):
    return clean(raw_data)

@graph(name="etl-pipeline")
def pipeline(url):
    data = extract(url)
    return transform(data)
5
SDK Languages
<5min
Setup Time
∞
Scale
$0
To Start

Try It Out

See it in action

Explore how GraphIngest works β€” no signup required. Run a mock pipeline, watch the real-time dashboard, or interact with an AI agent.

pipeline.py
1from graphingest import graph, node
2
3@node(retries=3, timeout=30)
4def extract(url: str):
5 """Fetch raw data from source."""
6 return fetch_data(url)
7
8@node(retries=2)
9def validate(data: dict):
10 """Validate schema and data quality."""
11 return check_schema(data)
12
13@node
14def transform(validated_data: dict):
15 """Clean and normalize data."""
16 return normalize(validated_data)
17
18@node
19def load(clean_data: dict):
20 """Write to destination database."""
21 return db.insert(clean_data)
22
23@graph(name="etl-pipeline")
24def pipeline(url: str):
25 raw = extract(url)
26 valid = validate(raw)
27 clean = transform(valid)
28 return load(clean)
Execution Output

Click "Run Pipeline" to start

Watch tasks execute with mock data

Start Building for Real

Free tier available β€” no credit card required

Use Cases

What the hosted orchestrator does

Branch, wait, stop, start on a clock, and retry one step. The run happens here.

Vercel Cron Job Timeouts

Vercel serverless functions timeout at 10s (Hobby) or 60s (Pro). GraphIngest dispatches tasks to Cloud Run workers asynchronously β€” your cron route returns instantly while pipelines run for hours in the background.

# Vercel cron triggers the pipeline β€” returns in <1s
# Pipeline runs for hours on managed infra
@graph(name="nightly-sync", timeout_seconds=7200)
def sync(): ...

deploy()  # cron calls this endpoint
Read the guide

Long-Running Batch Processing

Process 10,000+ documents in parallel with .map(). Each task gets its own timeout, retries, and caching β€” no cold starts, no connection limits, no 256KB state caps.

@graph(name="batch", timeout_seconds=3600)
def process(doc_ids: list[str]):
    raw = fetch.map(doc_ids)       # 10K parallel
    processed = transform.map(raw) # auto-retry
    return store.map(processed)    # cached

AI Agent Orchestration

Run multi-agent research pipelines with built-in ReAct loops, tool calling, and LangGraph integration. Fan-out 50 agents in parallel with rate limiting to stay within LLM API budgets.

@agent(name="researcher", tools=[search, scrape],
       model="standard")
def research(query: str) -> str:
    """You are a research assistant."""
    ...

# Fan-out 50 agents in parallel
results = research.map(queries)
Read the guide

Failure Recovery & Incremental Retry

When task 49 of 50 fails, restart from task 49 β€” not from scratch. Completed tasks return cached results instantly. Failed tasks land in a dead letter queue for review.

# Task 49 failed? Resume from exactly there.
client.restart_from_failure(flow_run_id)
# Tasks 1-48: cached results (0ms)
# Task 49: re-executed with retries
# Task 50: runs after 49 succeeds

GitHub starts the job

A small file in your repo asks GraphIngest to start. GitHub’s computer turns off. When the job finishes, the mark on that save turns green or red, and the dashboard shows the run came from GitHub.

uses: graphingest/run@v1
with:
  api-key: ${{ secrets.GRAPHINGEST_API_KEY }}
  flow-id: ${{ secrets.GRAPHINGEST_FLOW_ID }}
Read the guide

Multi-Tenant SaaS Workloads

Imagine you run an AI writing tool β€” one enterprise customer kicks off 500 document generations at once, starving every other user. With GraphIngest, per-user concurrency limits cap them at 5 parallel runs, throttling keeps your OpenAI bill under control at 100 calls/min, and priority queuing lets paid users jump the line. One decorator, no custom infrastructure.

@graph(
    name="process-upload",
    concurrency=ConcurrencyPolicy(
        limit=5, key="user_id"
    ),
    throttle=ThrottlePolicy(
        limit=100, period_seconds=60
    ),
    priority=10
)
def process(user_id, file_url): ...

If / else between steps

The check step returns yes or no. Yes runs the yes step. No runs the no step. The other step is skipped, and the run page shows that.

yes:
  depends_on: [check]
  when: yes

no:
  depends_on: [check]
  when: no
Read the guide

Stop a job

Cancel a run and it stops. Steps that already finished stay finished. A step that was still going is cancelled. A later call does not continue the job.

PATCH /api/runs/$RUN_ID
Authorization: Bearer $GRAPHINGEST_API_KEY
{ "state": "CANCELLING" }
Read the guide

A job can wait, then continue

One step asks, then the job stops. Nothing keeps running. When the answer arrives, the next step starts. If the answer never comes and that step has a time limit, it fails and a restart continues from there.

continue:
  depends_on: [ask]
  wait_for: answer.ready

POST $SIGNAL_URL
{ "event": "answer.ready" }
Read the guide

A Slack message when a job fails

The job fails at night. In the morning there is a Slack message with the error and a link to that run. You continue from the row that failed. A finished job stays quiet when you choose failures only.

POST /api/settings/notifications
Authorization: Bearer $GRAPHINGEST_API_KEY
{
  "channel_type": "slack",
  "alert_level": "failures_only",
  "config": {
    "webhook_url": "https://hooks.slack.com/services/..."
  }
}
Read the guide

A job can start itself

Set a clock on the flow, or type your own cron expression. Every night at 3:00 UTC, the job starts. Nothing stays running between nights.

schedule:
  cron: "0 3 * * *"
Read the guide

Retry one step

A function that fails tries again on its own. If the job still fails, retry it. Functions that already finished stay finished.

@node(max_retries=3)
def transform(data):
    ...
Read the guide

Features

A hosted orchestrator

Tasks, workflows, and jobs. You write the code. The run happens here.

Steps, branches, and waits

One step finishes and the next starts. A yes or no answer picks one step and skips the other. A wait stops the job until an answer arrives.

Retry one step

A function that fails tries again on its own. Retry the job and the functions that already finished stay finished.

Flow Control

Concurrency limits, throttling, and priority queuing built into the SDK. No external config needed.

Timeouts & Deadlines

Per-node and per-graph timeouts with graceful cancellation. Keep pipelines on schedule.

A chart of the run

Each step is a box. A function inside a job shows up while it runs. Click a box to see the input, the result, and the error.

AI Agent Orchestration

Built-in ReAct agents and LangGraph support. Run multi-step AI workflows with tool calling, memory, and automatic tool routing.

How It Works

Three steps to production

01

Define your graph

Use decorators to define nodes, edges, and retry policies. The SDK handles the rest.

02

Deploy with one command

Call deploy() and the platform handles everything. Auto-scales from zero to handle any load.

03

Monitor & iterate

Watch runs in real-time on the dashboard. Debug failures with structured logs and traces.

SDKs

Your language, your way

First-class SDKs with the same decorator-based API across all languages.

TypeScript and Go, with deploy() and zero idle cost

Python

@node / @agent

  • Type-safe decorators
  • Async/await native
  • ReAct + LangGraph agents
View on GitHub β†’

TypeScript

node() / agent()

  • Full type inference
  • ESM & CJS
  • Built-in ReAct agents
View on GitHub β†’

gi.Node() / gi.Agent()

  • Goroutine-based
  • Zero dependencies
  • Struct-based config
View on GitHub β†’

JavaScript

node() / agent()

  • No TypeScript needed
  • CommonJS native
  • Node.js 18+
View on GitHub β†’

Java

Node.create() / React.agent()

  • Typed generics
  • Builder pattern
  • Java 17+ records
View on GitHub β†’

Why GraphIngest

Built different from the ground up

Traditional orchestrators force you to manage workers and infrastructure. Serverless orchestrators lock you into one language and their cloud. GraphIngest gives you both simplicity and control.

Zero-config deploy

One function call. No Dockerfiles, no CLI tools, no YAML.

5 SDK languages

Python, TypeScript, Go, JavaScript, Java β€” same API everywhere.

Built-in AI agents

ReAct loops, tool calling, and LLM routing in the SDK β€” not bolted on.

Scale to zero

Pay nothing at idle. Auto-scale to thousands of parallel tasks.

How we compare

CapabilityWorker-based
Orchestrators
Serverless
Orchestrators
GraphIngest
DeploymentWorkers + configAdd route to appdeploy() β€” zero config
Language SDKs1 (Python)1 (TypeScript)5 languages
Infra managementYou manage workersYou manage appPlatform manages all
Scale to zeroyes
Parallel fan-outVia external executorNo native support.map() with auto-scale
AI agent supportBuilt-in ReAct + LLM
Dashboard latencyPolling (seconds)Polling (seconds)Real-time (instant)
Retry granularityRe-run entire flowStep-levelResume from failure
Env variable mgmtExternal blocksYou manageDashboard UI + env_path
Idle costWorkers run 24/7Your infra cost$0 when idle

Pricing

Free to start, scales with you

Free

$0/mo

Get started with generous free limits.

  • Up to 5 pipelines
  • 60 execution minutes / month
  • 10 min max per node Β· 30 min max per graph
  • All 5 SDK languages
  • Dashboard included
  • Community support
Start Free
Popular

Pro

$49/mo

Managed infrastructure. Zero ops.

  • Unlimited pipelines
  • Unlimited execution minutes
  • 60 min max per node Β· 6 hr max per graph
  • Managed compute workers
  • Team collaboration
  • Priority support & SLA
Get Started
Deploy in under 5 minutes

A hosted orchestrator
for your next job.

Write the tasks, the workflow, or the job. Deploy once. The run happens here.

Free tier available5 SDK languagesSOC 2 infrastructureNo vendor lock-in