The all-in-one workspace for getting contacted.

Creating your landing page takes two minutes. Setting up email, a booking page, and a contact form used to take hours. Now it takes two minutes too.

Free to start · no credit card.

6-in-1

One workspace for all of it.

Mail, meetings, forms, a public board, and a mailing list — each one set up per project.

For agents

Works with your agent stack

Hand an agent the project inbox over MCP — one hosted server, one Bearer key, the same mailbox your team reads.

Point Claude Code, Cursor, or any MCP client at the hosted URL and the project becomes 56 tools. A session looks like this.

Example Claude Code session using the Kontacts MCP server:

$ claude

> Create a landing page for acme.com

● Write(app/page.tsx)         +148
● Write(app/globals.css)       +32
  ✓ built in 1.4s

> Using kontacts MCP, set up the mailbox,
  booking page and public kanban for acme

● kontacts - add_domain (domain: acme.com)
  ⎿ MX, SPF and DKIM to publish
● kontacts - verify_domain (domain_id: 4c07be91…)
  ⎿ verified — hello@acme.com receives
● kontacts - create_meeting_type (title: Demo)
● kontacts - set_availability (timezone: Europe/Paris)
● kontacts - set_meeting_type_active (is_active: true)
● kontacts - publish_kanban (confirm: true)
  ⎿ enabled — public at /p/acme/kanban
  ✓ mailbox, booking page and board live

> Draft a first newsletter to announce our v1.0.0

● kontacts - create_audience (name: acme news)
  ⎿ signup page live
● kontacts - create_draft (subject: v1.0.0 is live)
● kontacts - preview_issue (issue_id: 7b3ac5d0…)
  ⎿ rendered — nothing sent
  ✓ draft saved for review

Installation

Paste it once. Your agent takes it from there.

claude mcp add --transport http kontacts https://kontacts.dev/api/v1/mcp \
  --header "Authorization: Bearer gm_live_…"
Paste your own gm_live_ key — mint one under Settings → API keys.Full setup guide →
Free to start · no credit card
Inbox

Everything a project inbox needs. Nothing a SaaS wants.

Receiving is unmetered.
Unlimited aliasesEvery address at your domain lands in the project inbox.
hello@bugs@support@anything@
Easy domain setupPoint a domain at Kontacts. The dashboard tells you what is left to verify.
Add your domainWe check what is left
Booking page

A booking page per project

How the project booking page works →
One booking link per projectShare one link and let anyone schedule time with the project team — not with you personally.
kontacts.dev/book/your-project/intro-call
Team-owned, not person-ownedSomeone leaving the team doesn't break the booking link. Availability is shared across whoever is on the project.
monicaon call Mon–Wedrichardon call Thu–Frierlichleft the team
Book, confirm, doneA visitor picks a slot the project is actually free for. The confirmation goes back to them, and the appointment lands on the project's agenda. No back-and-forth.
Contact forms

A contact form that lands in the project inbox

A hosted page, or an endpoint you drop on your site.

Preview of the contact form a visitor fills in, and the Forms view its submissions land in

The frame holds the whole page a visitor sees on piedpiper.com. The bar beside it is this preview's.

Drop it on your siteIt is one POST to the URL below, so an HTML form, a fetch call or a React component all work. The public key is meant to live in your page source. No domain of your own required.
POST kontacts.dev/api/v1/f/gf_live_…
As many named forms as you needA project can hold many forms, each named. Careers, Support, the landing page.
Contact formCareersSupport
Submit, land, triageA visitor submits the form on your site. The row lands in the project inbox and in Forms, and the sender is added to Contacts when the form has an email field. It does not open a GitHub issue on its own.

Give your projects the tools to scale

Get startedFree to start · no credit card

Pricing.

Billed per organisation, not per seat. Signing up puts you on Free. Indie Hacker is a choice you make — nobody is converted into a paid plan by silence. Every plan includes the shared inbox, sendable aliases, a booking page, API keys, and optional GitHub routing. Plans differ by how many projects, people, and sends the organisation can hold.
Freetoday
$0forever
Everything the product does, at a size that fits one person.
Inbox
  • 2 projects
  • 10 received emails per UTC day
Sending
  • 10 outbound sends per UTC day
Team
  • 1 member per org
Get started
Indie Hackerper organisation
$8/month
For one person answering real support mail from real users.
Inbox
  • 10 projects
  • Unmetered receiving — with issue routing on, mail to the addresses on your list opens an issue
Sending
  • 1,000 outbound sends per month, 200 per day
Team
  • 3 members per org
Enterprisecustom
Contact uscustom limits
Limits set per org, by us, to whatever your team needs.
Inbox
  • Unlimited projects
  • Unlimited receiving
Sending
  • Unlimited sending
Team
  • Unlimited members per org
Contact us

Existing projects stay if you leave Indie Hacker. The Free ceilings apply again; nothing is deleted.

Questions, answered short.

Do I need my own domain?Yes, for mail. Receiving means pointing a domain — or a subdomain like mail.yourproject.dev — at Kontacts.
How does the booking page work?A booking page that belongs to your project, not to a person. Share one link and anyone can schedule time with whoever's available. Set your hours in Settings → Calendar settings, then publish the meeting type.
How do contact forms work?Create a named form in Settings → Forms endpoints, shape its fields, then go live and share the hosted page or drop the snippet on your site. Submissions land in the project inbox and in Forms. The address on the form is self-reported, so a submission does not open a GitHub issue on its own — it sits labelled Quarantined until you release it. No domain needed: the form goes live the moment you open it.
Does the GitHub integration work on private repos?Yes. The GitHub App only ever sees the repositories you pick when you install it, and you can change that selection any time.
What stops spam becoming issues?The address list first, then sender authentication. An issue opens for the local-parts you put on the list; mail to anything else lands in your Kontacts inbox and stays there, unless you turn on the optional catch-all. Once you turn issue routing on, mail to a listed address still has to prove who sent it before it becomes an issue: we read the SPF, DKIM and DMARC results on the message and hold anything that fails, or that carries nothing to check at all — and if those results can't be read, we hold it rather than publish it. Held mail isn't dropped: it lands in your Kontacts inbox marked Quarantined, and you can release it. What this isn't is a content filter — a sender who really is who they say they are, writing to an address on your list, still opens an issue, however unwelcome the mail.
Can I leave?There's no self-serve export yet — it's planned. Until it ships, a data request to the address in our privacy policy gets you everything we hold.
Is it a full mail client or a full calendar?Neither. The inbox is project communication infrastructure — there's no IMAP today, so you can't point a desktop client at it. The booking page is one public page built around the hours a project is willing to be interrupted, not a view of your own day. An optional Google Calendar connect can hide times a member is already busy; it does not replace those project hours.

Your next project needs an address, a booking page, and a contact form.

Get startedFree to start · no credit card