[{"data":1,"prerenderedAt":223},["ShallowReactive",2],{"footer-compare":3,"dynamicForm-newsletter":24,"mdc-yxx4ax-key":55,"use-cases-page":75,"use-cases-items":87,"mdc--uw9989-key":214},[4,8,12,16,20],{"path":5,"competitorName":6,"title":7},"\u002Fcompare\u002Fmake","Make","dataflows vs Make",{"path":9,"competitorName":10,"title":11},"\u002Fcompare\u002Fpipedream","Pipedream","dataflows vs Pipedream",{"path":13,"competitorName":14,"title":15},"\u002Fcompare\u002Fpower-automate","Power Automate","dataflows vs Power Automate",{"path":17,"competitorName":18,"title":19},"\u002Fcompare\u002Fzapier","Zapier","dataflows vs Zapier",{"path":21,"competitorName":22,"title":23},"\u002Fcompare\u002Fn8n","n8n","dataflows vs n8n",{"id":25,"title":26,"apiEndpoint":27,"body":28,"description":28,"extension":29,"fields":30,"mail":43,"meta":46,"navigation":35,"path":47,"seo":48,"stem":49,"submitButtonLabel":50,"successMsg":51,"__hash__":54},"forms\u002Fforms\u002Fnewsletter.yml","Newsletter","\u002Fapi\u002FdynamicFormsInbox",null,"yml",[31,38],{"name":32,"type":32,"label":33,"placeholder":34,"required":35,"validationError":36,"width":37},"email","Email","your@email.com",true,"Please enter a valid email address","full",{"name":39,"type":40,"label":41,"required":35,"validationError":42,"width":37},"privacy","checkbox","I agree to the [Privacy Policy](\u002Fprivacy)","You must agree to the privacy policy",{"to":44,"subject":45},"info@nbrx.com","New Newsletter Subscription",{},"\u002Fforms\u002Fnewsletter",{"title":26},"forms\u002Fnewsletter","Subscribe",{"title":52,"description":53},"Successfully subscribed","You will receive a confirmation email shortly.","9jNbCbi3ukyzmYA4p66npxcPS6f5NJ1U0M7vJ9PtbBM",{"data":56,"body":57},{},{"type":58,"children":59},"root",[60],{"type":61,"tag":62,"props":63,"children":64},"element","p",{},[65,68],{"type":66,"value":67},"text","I agree to the ",{"type":61,"tag":69,"props":70,"children":72},"a",{"href":71},"\u002Fprivacy",[73],{"type":66,"value":74},"Privacy Policy",{"id":76,"title":77,"body":28,"description":78,"extension":29,"intro":79,"meta":80,"navigation":35,"path":81,"seo":82,"stem":85,"__hash__":86},"section_indices\u002Fuse-cases.yml","Real cases, real results","A few examples of what teams ship on dataflows. Composed from typical NBRX projects across e-commerce, manufacturing, services and more.","These are the kinds of automations dataflows is built for: processes that touch many systems,\nrun for days, must not lose a single record, and get smarter over time. Each example shows the\nproblem, how dataflows solves it, and what the business gets in return.\n",{},"\u002Fuse-cases",{"title":83,"description":84},"Use Cases - What teams build on dataflows","Real automation patterns built on dataflows for e-commerce, services, finance and operations.","use-cases","P4HdzhKYhw4l3gXCXcOghzrjtzT42wukTxL72MT3GcU",[88,120,151,181],{"id":89,"title":90,"body":28,"code":91,"description":92,"extension":29,"highlights":93,"industry":106,"meta":107,"navigation":35,"path":108,"problem":109,"seo":110,"solution":113,"stem":114,"systems":115,"__hash__":119},"useCases\u002Fuse-cases\u002Fcustomer-onboarding.yml","Customer Onboarding","\u002F\u002F Customer onboarding workflow\nexport const onboarding = defineWorkflow({\n  id: 'customer-onboarding',\n  trigger: { type: 'webhook', path: '\u002Fsignup' },\n\n  async run({ event, step }) {\n    const { email, name } = event.body\n\n    const account = await step.run('create-account', () =>\n      identity.createUser({ email })\n    )\n\n    const customer = await step.run('create-billing', () =>\n      billing.createCustomer({ email, accountId: account.id })\n    )\n\n    await step.run('create-crm-contact', () =>\n      crm.contacts.create({ name, email, customerId: customer.id })\n    )\n\n    await step.run('send-welcome', () =>\n      email.send({\n        to: email,\n        template: 'welcome',\n        data: { name }\n      })\n    )\n\n    return { accountId: account.id, customerId: customer.id }\n  },\n\n  onFailure: ({ step, context }) => step.run('rollback', () =>\n    cleanup.undo(context)\n  )\n})\n","From sign up to fully provisioned customer in minutes, across CRM, billing and email. With proper rollback if any step fails.",[94,98,102],{"title":95,"description":96,"icon":97},"All systems in sync","One signup creates the right record in every system, in the right order.","i-lucide-link",{"title":99,"description":100,"icon":101},"Safe rollback","If something fails, previous steps are undone automatically. No zombie accounts.","i-lucide-undo-2",{"title":103,"description":104,"icon":105},"Pause for humans","Workflow can wait for sales review or first payment, then continue on its own.","i-lucide-user-check","SaaS & Services",{},"\u002Fuse-cases\u002Fcustomer-onboarding","When a new customer signs up, several systems need to be set up at once: an account in the\nidentity system, a customer record in billing, a contact in the CRM, and a welcome email\nsequence in the marketing tool.\n\nIf just one of these steps fails halfway through, you end up with a broken customer: a user\nwho can log in but has no billing account, or a contact in the CRM that nobody can charge.\nCleaning that up by hand is slow, error prone and embarrassing when the customer notices.\n",{"title":111,"description":112},"Customer Onboarding Automation","Automate customer signup across CRM, billing and email with safe rollback.","dataflows runs the whole onboarding as one durable workflow. Every step is recorded. If a step\nfails, it retries. If it cannot succeed, the workflow rolls back the previous steps so you never\nend up with a half-created customer.\n\nThe workflow can also wait for slow events without using server resources: an email\nconfirmation, a manual review by sales, or the first payment. When the event arrives, the\nworkflow picks up exactly where it stopped.\n","use-cases\u002Fcustomer-onboarding",[116,117,118,33],"CRM","Billing","Identity","6snm0wWQ7ytpiP-TBivVBSjl6o61fBJofW8449vu97c",{"id":121,"title":122,"body":28,"code":123,"description":124,"extension":29,"highlights":125,"industry":137,"meta":138,"navigation":35,"path":139,"problem":140,"seo":141,"solution":144,"stem":145,"systems":146,"__hash__":150},"useCases\u002Fuse-cases\u002Finvoice-approval.yml","Invoice Approval","\u002F\u002F Invoice approval workflow\nexport const invoiceApproval = defineWorkflow({\n  id: 'invoice-approval',\n  trigger: email.onReceive({ subject: 'Invoice' }),\n\n  async run({ event, step }) {\n    const pdf = await step.run('extract-pdf', () =>\n      attachments.firstPdf(event)\n    )\n\n    const data = await step.run('ai-extract', () =>\n      ai.extract(pdf, {\n        amount: 'number',\n        date: 'date',\n        vendor: 'string',\n        costCenter: 'string'\n      })\n    )\n\n    const approver = await step.run('find-approver', () =>\n      people.byCostCenter(data.costCenter)\n    )\n\n    const decision = await step.waitForApproval({\n      approver,\n      timeout: '7d',\n      summary: data\n    })\n\n    if (decision === 'rejected') return { status: 'rejected' }\n\n    await step.run('book-in-accounting', () =>\n      accounting.uploadInvoice({ pdf, data })\n    )\n\n    return { status: 'booked' }\n  }\n})\n","Incoming invoices are read by AI, sent to the right approver, and booked into accounting automatically. With a clear paper trail for finance.",[126,130,133],{"title":127,"description":128,"icon":129},"AI does the typing","Amount, date, vendor and cost center are extracted automatically from the PDF.","i-lucide-sparkles",{"title":131,"description":132,"icon":105},"Right approver, every time","Routing by cost center, amount or vendor. With a clear escalation path if nobody answers.",{"title":134,"description":135,"icon":136},"Audit ready","Every invoice has a full timeline: when it arrived, who approved it, when it was booked.","i-lucide-shield-check","Finance & Operations",{},"\u002Fuse-cases\u002Finvoice-approval","Invoices arrive by email from many vendors, in many shapes. Someone has to open each PDF, type\nthe numbers into the accounting system, figure out who has to approve it, chase that approval,\nand finally book the invoice.\n\nThis is slow, easy to get wrong, and impossible to audit later. When something goes missing or\nis paid twice, nobody can say exactly what happened.\n",{"title":142,"description":143},"Invoice Approval Automation","Automate invoice handling from email to accounting with AI and human approval.","dataflows watches the inbox. When an invoice comes in, AI extracts the key data: amount, date,\nvendor, cost center. The workflow then asks the right approver by email or Slack and waits up\nto seven days for an answer.\n\nOnce approved, the invoice is uploaded into the accounting system with all metadata attached.\nIf something is missing or unclear, the workflow asks a human instead of guessing. Every step\nis logged so finance can always see what was done, by whom, and when.\n","use-cases\u002Finvoice-approval",[33,147,148,149],"AI \u002F OCR","Accounting","Slack","VU-_EZ3wr18D60949qvDX8iD_w8hoLya59KKMK6ZqEU",{"id":152,"title":153,"body":28,"code":154,"description":155,"extension":29,"highlights":156,"industry":169,"meta":170,"navigation":35,"path":171,"problem":172,"seo":173,"solution":176,"stem":177,"systems":178,"__hash__":180},"useCases\u002Fuse-cases\u002Flead-enrichment.yml","Lead Enrichment","\u002F\u002F Lead enrichment workflow\nexport const leadEnrichment = defineWorkflow({\n  id: 'lead-enrichment',\n  trigger: { type: 'webhook', path: '\u002Flead' },\n\n  async run({ event, step }) {\n    const { name, email } = event.body\n\n    const enrichment = await step.run('enrich', () =>\n      enrich.byEmail(email)\n    )\n\n    const score = await step.run('score', () =>\n      scoring.evaluate({ ...enrichment, source: event.source })\n    )\n\n    const lead = await step.run('upsert-crm', () =>\n      crm.leads.upsert({\n        name, email,\n        company: enrichment.company,\n        score,\n        rating: score > 80 ? 'Hot' : 'Warm'\n      })\n    )\n\n    await step.run('notify-sales', () =>\n      slack.send(\n        score > 80 ? '#sales-enterprise' : '#sales-inbound',\n        `New lead: ${name} (${enrichment.company.name}) — score ${score}`\n      )\n    )\n\n    return { leadId: lead.id, score }\n  }\n})\n","New leads are enriched with company data, scored and routed to the right sales person within seconds. No more cold leads sitting in a queue.",[157,161,165],{"title":158,"description":159,"icon":160},"Enrich automatically","Company size, industry, location and tech stack added before sales sees the lead.","i-lucide-zoom-in",{"title":162,"description":163,"icon":164},"Score with your own rules","Apply the criteria your team actually uses. Not a generic \"lead score\" from a SaaS tool.","i-lucide-target",{"title":166,"description":167,"icon":168},"Route in real time","Right person, right channel, right context. From form submission to Slack ping in seconds.","i-lucide-route","Sales & Marketing",{},"\u002Fuse-cases\u002Flead-enrichment","Marketing keeps producing leads, but sales gets a thin row in a CRM: a name, an email, maybe a\ncompany. Before they can act, someone has to look up the company size, the industry, the\nlocation, and decide if this is a high value lead or just noise.\n\nThis research takes time. While it happens, the lead cools down. By the time someone calls,\nthe prospect has already moved on to a competitor.\n",{"title":174,"description":175},"Lead Enrichment Automation","Enrich, score and route new leads to sales in seconds with dataflows.","dataflows triggers the moment a new lead is captured. It enriches the contact with company data\nfrom public sources, scores the lead based on your own rules, and routes it to the right sales\nchannel: enterprise, mid market, self serve, or \"do not pursue\".\n\nThe right sales person gets a notification in Slack with the full context, ready to act. The\nwhole flow happens within seconds, not the next morning.\n","use-cases\u002Flead-enrichment",[116,179,149],"Enrichment APIs","6jHYQ1T308hsYGYRJ1T6S1q3MMm2D7yHtLeskkgGFhk",{"id":182,"title":183,"body":28,"code":184,"description":185,"extension":29,"highlights":186,"industry":199,"meta":200,"navigation":35,"path":201,"problem":202,"seo":203,"solution":206,"stem":207,"systems":208,"__hash__":213},"useCases\u002Fuse-cases\u002Forder-sync.yml","Order Synchronization","\u002F\u002F Order sync workflow\nexport const orderSync = defineWorkflow({\n  id: 'order-sync',\n  trigger: shop.onOrderCreated(),\n\n  async run({ event, step }) {\n    const order = event.payload\n\n    const isNew = await step.run('persist', () =>\n      db.orders.insertIfMissing(order)\n    )\n    if (!isNew) return { status: 'skipped' }\n\n    await step.run('sync-erp', {\n      retries: 5,\n      backoff: 'exponential'\n    }, () =>\n      erp.createSalesOrder(order)\n    )\n\n    await step.run('sync-warehouse', () =>\n      warehouse.reserveStock(order)\n    )\n\n    await step.run('mark-synced', () =>\n      db.orders.update(order.id, { status: 'synced' })\n    )\n\n    return { status: 'synced' }\n  }\n})\n","Shop orders flow into ERP and warehouse in real time, even on peak days. With idempotency, retries and a full audit trail of every order.",[187,191,195],{"title":188,"description":189,"icon":190},"Never lose an order","Every order is saved in your own database first. Even if every external system fails.","i-lucide-database",{"title":192,"description":193,"icon":194},"Exactly once","Built in idempotency. Duplicate webhooks from the shop do not create duplicate orders.","i-lucide-refresh-cw",{"title":196,"description":197,"icon":198},"Survives peak load","Smart retries and backoff. Black Friday volume does not break the pipeline.","i-lucide-trending-up","E-Commerce & Retail",{},"\u002Fuse-cases\u002Forder-sync","Online orders need to land in the ERP for invoicing and in the warehouse for fulfillment. On a\nnormal day this is fine. On a campaign day, it is thousands of orders per minute, and any of\nthem can fail because the ERP is slow, the warehouse API is down, or the connection drops.\n\nLosing an order means losing money and losing trust. Processing the same order twice is just as\nbad. And once volume picks up, the simple \"send and pray\" integration that worked last year\nstarts dropping things silently.\n",{"title":204,"description":205},"Order Synchronization Automation","Reliable real time order sync from shop to ERP and warehouse, even at peak load.","dataflows handles every order as a durable workflow. The order is first saved in your own\ndatabase, so it is never lost. Then it is pushed to the ERP and the warehouse, with retries\nif either system is busy.\n\nEvery order is processed exactly once, even if the shop sends the webhook twice. If the ERP is\ndown, the workflow waits and retries instead of failing. If something is permanently broken, it\nshows up in the dashboard so the team can fix it without losing the order.\n","use-cases\u002Forder-sync",[209,210,211,212],"Shop","ERP","Warehouse","Database","-6i4fjVXV6SVpjZLIaXrJwNU_FqPo9nEv7vHRPWnw1A",{"data":215,"body":216},{},{"type":58,"children":217},[218],{"type":61,"tag":62,"props":219,"children":220},{},[221],{"type":66,"value":222},"These are the kinds of automations dataflows is built for: processes that touch many systems,\nrun for days, must not lose a single record, and get smarter over time. Each example shows the\nproblem, how dataflows solves it, and what the business gets in return.",1776512574751]