Skip to main content

Keeper Network for Onchain Automation: Chainlink Automation or Compose

A keeper network such as Chainlink Automation runs a contract's trigger logic as a hosted service, priced by network. Goldsky Compose runs schedule, event, and API triggers as TypeScript a team writes. When each fits, what each costs, and how to move off Gelato Web3 Functions.

Keeper Network for Onchain Automation: Chainlink Automation or Compose cover image
Written by
image of Adam Stockermans
Adam Stockermans

Software Engineer

A smart contract often needs an action it cannot trigger by itself. Examples include a price update on a schedule, a payout after a holder snapshot, or a response to an event on another chain. A keeper network, such as Chainlink Automation, runs that trigger logic as a hosted service a contract calls into. Goldsky Compose runs the same schedule, event, and API triggers as TypeScript code a team writes and deploys on Goldsky's infrastructure. This article explains when each path fits, then shows a working Compose configuration for a cron-triggered task.

Flow from an offchain trigger through a Goldsky Compose task to an onchain transaction

A keeper and an oracle solve adjacent problems. A keeper decides when to act. An oracle decides what data to act on. Goldsky's guide on custom oracle infrastructure covers when a team builds a first-party price feed instead of subscribing to one.

When a keeper network fits

Chainlink Automation supports three trigger types. A time-based trigger runs on a schedule. A custom logic trigger checks a view function a contract defines. A log trigger reacts to an onchain event (Chainlink Docs, Automation Concepts (opens in a new tab)). A custom logic trigger can check a contract's balance, or release a limit order once it reaches its price level. Those are two examples from Chainlink's own documentation. Automation Nodes watch for these conditions and submit the upkeep transaction. The same node operators run Chainlink's Data Feeds.

A team funds an upkeep with LINK. Chainlink Automation charges the gas cost plus a percentage premium, and the premium differs by network (Chainlink Docs, Automation Billing and Costs (opens in a new tab)). On Polygon the premium was 70% at the time of a documented example transaction. On Ethereum mainnet it is 20% (Chainlink Docs, Supported Networks (opens in a new tab)). Automation Nodes do not compete for upkeeps. They work together so every registered upkeep gets performed. This keeps gas costs predictable for the team that funds it.

A keeper network fits when the trigger condition is a simple, contract-readable check and the action is one call. It fits less well when the update needs an external API call, state across several steps, or a record of what ran and why.

When a custom automation job fits

Goldsky Compose is an onchain execution framework. A task is a TypeScript file that runs on a cron schedule, an HTTP call, or an onchain event. It runs inside an isolated sandbox (Compose introduction (opens in a new tab)). Goldsky traces every external call a task makes and saves the inputs and outputs for later review.

A task can call an external API, read Goldsky-indexed chain data, compute a result, and write onchain. All of that runs in one program (Task authoring basics (opens in a new tab)). Compose manages wallets, retries, and nonces, so a team writes only the task logic. Goldsky publishes 8 build guides for custom oracles and automation (Custom Oracle Infrastructure: When to Build vs Buy). They include a NAV oracle (opens in a new tab) that publishes a fund's value on a cron schedule, and a corporate-actions distributor (opens in a new tab) that pays token holders from a snapshot.

Goldsky lists scheduled tasks and keepers as one of Compose's use cases, alongside rebalance strategies, payouts, and maintenance windows. A payout or rebalance that moves money benefits from the same trace Compose builds for every task. An auditor can review which external call ran, when, and what it returned, without re-running the job.

Compose retries a failed task by default, with 3 attempts and a 1-second initial delay that doubles each time. A task triggered by an onchain event can also wait for block confirmations before it runs. A reorg then cancels the queued event, instead of letting the task act on data that no longer exists.

A custom automation job fits when the trigger needs offchain computation, several data sources, or a traceable record for an auditor. It costs more engineering time upfront than subscribing to a keeper network, in exchange for logic a team fully controls.

The table below lines up the two paths on four questions. A team asks what can trigger the action, which chains it reaches, what it costs, and who operates the system that runs it.

Keeper network vs custom automation on Goldsky Compose


Keeper network (Chainlink Automation)Custom automation (Goldsky Compose)
Trigger typesTime-based, custom logic (view function check), log trigger on an onchain event (Automation Concepts (opens in a new tab))Cron schedule, HTTP call, onchain event, with optional parallel processing and reorg-safe confirmations (Task triggers (opens in a new tab))
ChainsPriced and deployed per network, each with its own registry contract and premium (Supported Networks (opens in a new tab))150 chains and 271 networks, read through the same index that powers a team's app (Goldsky Chains)
Cost modelGas plus a percentage premium, paid from a LINK-funded upkeep balance a team tops up (Automation Billing and Costs (opens in a new tab))Scale plan: 1 free worker (720 hours) and 10,000 free function calls a month, then $0.05 per worker-hour and $6.00 per 1,000 calls. An optional 10% surcharge applies on top of any gas Goldsky sponsors. That rate is the same on every chain. A task funded with a team's own wallet pays no surcharge (Pricing summary (opens in a new tab))
Who runs the infrastructureAutomation Nodes, a decentralized set of node operators (Automation Concepts (opens in a new tab))Goldsky's cloud runs the task in an isolated sandbox, with the same code runnable locally first (Compose introduction (opens in a new tab))

Cost scales differently across the two paths. A keeper network charges per upkeep execution, in gas plus the network's premium. A job that runs often on an expensive chain costs more each month. Goldsky Compose charges for worker-hours and function calls instead. The same task costs the same, whether it reads one chain or several of Compose's 150 chains (Pricing summary (opens in a new tab)). Compose's pricing page lists one rate across every chain, with no per-chain table.

Chainlink Automation premium by network, 20% to 100%, against Compose's flat 10% gas-sponsoring surcharge

How to run it on Goldsky

A Compose app declares its triggers in a compose.yaml manifest. This example from Goldsky's Bitcoin oracle guide (opens in a new tab) runs a task every minute on a cron trigger:

yaml
name: "bitcoin-oracle"
api_version: "stable"
tasks:
  - path: "./src/tasks/bitcoin-oracle.ts"
    name: "bitcoin_oracle"
    triggers:
      - type: "cron"
        expression: "* * * * *"
    retry_config:
      max_attempts: 2
      initial_interval_ms: 1000
      backoff_factor: 1

The same manifest format supports an onchain_event trigger instead of cron. It names a network, a contract address, and an event signature. The task then reacts to a transfer or a log instead of a clock. Local development runs with goldsky compose start --fork-chains, and goldsky compose deploy ships the same code to Goldsky's cloud.

Moving off Gelato Web3 Functions

Gelato Web3 Functions, Gelato's keeper service, shut down on March 31, 2026 (KeeperHub, Migrate from Gelato Functions (opens in a new tab)). A team that ran a Gelato cron or time-interval trigger can move it to a Compose cron trigger. A Gelato onchain-event trigger maps to a Compose onchain_event trigger. A Gelato TypeScript function becomes a Compose task (Migrate from Gelato W3F (opens in a new tab)).

Two differences carry over. Compose does not support Solidity tasks, only TypeScript. Compose has no per-block trigger built in. A Turbo pipeline that indexes every block and posts to an HTTP-triggered task reproduces one (Migrate from Gelato W3F).

FAQ

Can a team use Chainlink Automation and Goldsky Compose together?
Yes. A contract can hold a Chainlink-maintained price feed. A separate Compose task can run the custom logic the feed alone does not cover, such as a payout or a multi-chain check.

What happens if a Compose task's onchain write fails?
The task retries according to its retry_config, with exponential backoff between attempts. After the last attempt, Compose marks the task failed and does not replay the event.

How much does a daily keeper job cost on Goldsky Compose?
A task that runs once a day, with a handful of calls per run, stays inside the monthly free allowance. That allowance is 1 worker and 10,000 function calls. Cost starts once a task runs continuously or makes many calls per trigger.

Does an onchain-event trigger wait for block confirmations?
By default a trigger fires as soon as Goldsky indexes the event. A task can set confirmations to wait a chosen number of blocks before it runs. This protects a task that moves money from acting on a reorged event.

© Endless Sky Inc. All rights reserved.

PrivacyTermsSecurity

System status