Headlessly

Launch

Go to market with campaigns, landing pages, forms, and audience segments.

You've built the product. Now bring it to market. headless.ly gives you everything you need to launch -- campaigns, landing pages, sign-up forms, and audience segmentation -- all connected to the same graph as your CRM, billing, and analytics.

import { Campaign, Segment, Form } from '@headlessly/marketing'
import { Content } from '@headlessly/content'

// Create your launch campaign
await Campaign.create({ name: 'Product Hunt Launch', type: 'Event', status: 'Active' })

// Build your landing page
await Content.create({ title: 'Pricing', slug: 'pricing', type: 'Page', status: 'Published' })

// Set up a waitlist form
await Form.create({ name: 'Waitlist', fields: ['name', 'email', 'company'] })

// Define your target audience
await Segment.create({ name: 'Early Adopters', definition: { source: 'product-hunt' } })

Key Entities

EntityPurposeKey Verbs
CampaignMarketing initiatives -- launches, drips, content pusheslaunch, pause, complete
ContentLanding pages, blog posts, docs (with type: Page, Post, etc.)publish, unpublish, schedule
FormData collection -- waitlist, sign-up, contact ussubmit, validate
SegmentAudience groups -- by source, stage, behaviorrecalculate, export

The Launch Pipeline

import { Form } from '@headlessly/marketing'
import { Contact } from '@headlessly/crm'
import { Event } from '@headlessly/analytics'
import { Campaign } from '@headlessly/marketing'

// Form submission creates a Contact, attributed to the campaign
Form.submitted((submission, $) => {
  $.Contact.create({
    name: submission.name,
    email: submission.email,
    stage: 'Lead',
    source: 'waitlist',
  })
})

// Campaign launched -- track attribution
Campaign.launched((campaign) => {
  Event.track({ name: 'campaign_launched', properties: { campaign: campaign.$id } })
})

Everything connects. A form submission creates a Contact. A Campaign tracks attribution. Analytics track the funnel. Billing converts leads to revenue.

On this page