A new user signs up. You get a name and an email. Is that a lead? A future power user? A churn risk? On their own, these two data points tell you almost nothing. The real value lies in understanding the context behind the user: their company, their role, their technical background, their online presence. This is the goal of data enrichment—transforming a simple contact into a rich, actionable profile.
But building this profile is a complex puzzle. The pieces are scattered across dozens of different services: CRM data from Apollo, social profiles from PeopleDataLabs, professional activity from GitHub, and so on. Manually researching each user is impossible at scale, and traditional automation tools often create brittle, hard-to-maintain chains of API calls. One small change or network hiccup can bring the entire process crashing down.
What if you could define this complex data-gathering and analysis process as a single, reliable, and intelligent service? What if you could treat your business logic with the same rigor as your application code?
Modern data enrichment isn't just about calling one API. It's about orchestrating a sequence of calls, where the output of one step often becomes the input for the next. This introduces significant technical challenges:
The solution is to stop treating business processes as fragile scripts and start treating them as first-class code. At Workflows.do, we enable you to build, deploy, and monitor reliable, event-driven, and AI-powered workflows that connect your entire business stack.
Instead of a messy visual diagram, you define your entire process in clear, concise code. Let's look at how you can build a powerful user-enrichment workflow that triggers on every new signup.
import { AI } from 'workflows.do'
export default AI({
onUserSignup: async ({ ai, api, db, event }) => {
const { name, email, company } = event
// Enrich contact details with lookups from external data sources
const enrichedContact = await api.apollo.search({ name, email, company })
const socialProfiles = await api.peopleDataLabs.findSocialProfiles({ name, email, company })
const githubProfile = socialProfiles.github ? await api.github.profile({ name, email, company, profile: socialProfiles.github }) : undefined
// Using the enriched details, deeply research the company and personal background
const companyProfile = await ai.researchCompany({ company })
const personalProfile = await ai.researchPersonalBackground({ name, email, enrichedContact })
const socialActivity = await ai.researchSocialActivity({ name, email, enrichedContact, socialProfiles })
const githubActivity = githubProfile ? await ai.summarizeGithubActivity({ name, email, enrichedContact, githubProfile }) : undefined
// Schedule a highly personalized email sequence to optimize onboarding
const emailSequence = await ai.personalizeEmailSequence({ name, email, company, personalProfile, socialActivity, companyProfile, githubActivity })
await api.scheduleEmails({ emailSequence })
// Summarize everything, save to the database, and post to Slack
const details = { enrichedContact, socialProfiles, githubProfile, companyProfile, personalProfile, socialActivity, githubActivity, emailSequence }
const summary = await ai.summarizeContent({ length: '3 sentences', name, email, company, ...details })
const { url } = await db.users.create({ name, email, company, summary, ...details })
await api.slack.postMessage({ channel: '#signups', content: { name, email, company, summary, url } })
},
})
Let's break down what makes this approach so powerful:
Defining your data enrichment pipeline as code with Workflows.do provides unparalleled advantages over traditional automation tools.
Stop fighting with brittle tools. Start building reliable, intelligent business services. Explore Workflows.do and turn your most complex operational processes into simple, observable code.