Huginn

Agents that monitor and act on your behalf

Automation & Workflows ★ 50k stars Medium setup MIT

Huginn is a system for building agents that watch the web and act on your behalf, like an open-source IFTTT. It targets technical users automating monitoring and notifications. It is deployed via Docker.

Key features

  • Agents that watch and act
  • Scrape, filter and transform data
  • Chain agents into pipelines
  • Email and webhook actions

Pros & cons

Strengths

  • Very flexible automation
  • Good for web monitoring
  • No vendor lock-in

Trade-offs

  • Configuration is technical
  • UI feels dated

Huginn replaces

Last reviewed Aug 26, 2026 · 884 words

Three Huginn agents wired in a line will watch a product page, notice when the price changes, and email you, and building that one pipeline teaches you most of what Huginn is. It has been doing this since 2013, it looks like it, and it remains the most flexible self-hosted way to poll the web on a schedule and react. The trade is that every agent is configured as a JSON blob in a textarea, so people who want a drag-and-drop canvas should read the last section before the first.

The mental model is events flowing between agents

An agent is a small worker with a schedule and a JSON options block. Some agents create events: a WebsiteAgent scraping a page, an RssAgent reading a feed, a WebhookAgent receiving a POST. Some transform them: TriggerAgent filters, EventFormattingAgent reshapes, DeDuplicationAgent drops repeats. Some act: EmailAgent, PostAgent for arbitrary HTTP calls, SlackAgent, PushoverAgent. You point each agent's receivers at the next one and events flow down the chain. Groups of agents are called scenarios, and a scenario exports to a single JSON file, which is how the community shares recipes and how you back up your work.

Here is the price watcher's first agent, scraping a page every hour:

{
  "expected_update_period_in_days": "2",
  "url": "https://example.com/product/123",
  "type": "html",
  "mode": "on_change",
  "extract": {
    "price": { "css": ".price", "value": "normalize-space(.)" }
  }
}

mode: on_change is the quiet star: the agent only emits an event when the extracted value differs from last time, so a TriggerAgent with the rule {"type": "field<value", "value": "40", "path": "price"} and an EmailAgent after it complete the pipeline. expected_update_period_in_days is not a schedule; it is how long the agent may go silent before Huginn flags it as broken on the dashboard, and that flag is the most underrated feature in the app. Scrapers rot, and Huginn tells you which ones have.

Interpolation everywhere uses Liquid templating, so {{ price }} in an email body, or {{ price | plus: 0 }} to coerce a number, works the same in every agent.

Run it in Docker, then change the password within 5 minutes

The single-container image bundles MySQL and is the right first install:

services:
  huginn:
    image: huginn/huginn
    ports:
      - "3000:3000"
    environment:
      - APP_SECRET_TOKEN=replace-with-64-random-characters
      - DOMAIN=huginn.example.com
      - REQUIRE_INVITATION_CODE=true
      - INVITATION_CODE=pick-something-private
    volumes:
      - ./mysql:/var/lib/mysql
    restart: unless-stopped

The seeded login is admin with password password. Change it before you do anything else, and keep REQUIRE_INVITATION_CODE on, because the default invitation code is public knowledge and an open Huginn is a free web scraper for anyone who finds it. If you would rather run against an existing PostgreSQL or MySQL, the huginn/huginn-single-process image takes DATABASE_* variables and you run a second copy as the worker; the bundled image is simpler and fine for one household.

Outbound mail is the SMTP_* variables in the same block, and it is worth configuring even if you notify by other channels, because EmailAgent and EmailDigestAgent are the simplest actions in the box.

Events pile up unless you tell them to expire

Every event is a row in the database, and a busy RssAgent emitting 200 events a day for a year is 73,000 rows nobody will read. Each agent has a "keep events" setting, from 1 day to forever; set it to 7 days on anything that is not an audit trail, or the database grows until MySQL is what you spend a weekend on. EmailDigestAgent is the other pressure valve: it batches a day of events into one message instead of one email per event, which is the difference between a notification system you keep and one you mute.

Where n8n beats it, and where it does not

n8n has 400-plus prebuilt integrations, a visual editor and a far larger community, and if your automation is "when a form is submitted, update a spreadsheet and post to Slack," it wins outright. Huginn wins when the source is an arbitrary web page rather than an API, when the logic is "tell me when this changes," and when you want a tool with no cloud edition to nudge you toward. The two are set against each other in Huginn vs n8n. For page-change alerts with no pipeline at all, changedetection.io is simpler still, and the rest of the automation category sits in between.

One real weakness: the UI has not been redesigned in a decade, and the dozens of agent types are discovered by reading each one's description panel rather than browsing a gallery. Budget an evening for the tour.

What I'd do

The compose file above on any box with 512 MB to spare, password and invitation code changed, SMTP configured, then rebuild the price watcher from this page as your first scenario so the model clicks. Set "keep events" to 7 days on everything, export scenarios to a git repo monthly. If you reach for it more than twice a week for web monitoring, it has earned its keep; if you find yourself wishing for a Google Sheets node, move that workflow to n8n and leave Huginn watching the web, which is the job it was built for.

Compare Huginn

17 head-to-head comparisons.

Similar automation & workflows apps