LogoLogo
API DocsTemplate GalleryProduct UpdatesContact Us
  • 📬Print & Mail
    • Ready to get started?
      • Pricing details
      • Fast Track Guide
    • Integrations
      • API integrations
        • Action IQ
        • Adobe Marketo Engage
        • Blueshift
        • Braze
        • Customer.io
        • Hubspot
        • Iterable
        • Jotform
        • Klayvio
        • Listrak
        • Make
        • Optimove
        • Salesforce
        • Salesforce Marketing Cloud
        • Segment
        • Simon Data
        • Zapier
      • No-code integrations
        • Agile CRM
        • Freshsales Suite
        • HubSpot
        • Microsoft Dynamics 365
        • Pipedrive
        • Salesforce
        • Salesforce Marketing Cloud
        • Zoho
      • Creative conversion tools
        • Figma plugin
    • Reaching your audience
      • Lob Audience
        • Target Audiences
        • Lookalike Audiences
        • Purchasing Audiences
      • All about addresses
      • Campaign audience guide
      • Additional Lob NCOA functionality
    • Designing mail creatives
      • Artboard layout
      • Creative formatting
        • PDF preflight checklist
        • Exporting PDFs from InDesign
        • Rendering errors
      • Mail piece design specs
        • Postcards
        • Self-Mailers
        • Letters
        • Letter envelopes
        • Letter add-ons
        • Checks
        • Snap packs
        • Booklets
        • Custom mail
      • Maximizing engagement
        • Dynamic personalization
          • Advanced templating (Handlebars)
            • Dynamic table tutorial
        • Adding QR codes
        • Short URLs
        • Informed Delivery
    • Building a mail strategy
      • One-time campaigns or triggered sends?
      • Choosing a delivery strategy
      • Managing mail settings
        • Using metadata
        • Declaring mail use type
      • USPS Promotions Through Lob
        • Tactile, Sensory & Interactive Promotion
        • Integrated Technology Promotion
        • First Class Mail Advertising Promotion
        • Add-Ons
      • Mailing class and postage
        • Certified Mail or Registered Mail
      • International mail
    • Send mail!
      • Launch your first campaign
      • Send mail via Print & Mail API
      • Send campaigns via the Campaigns API
      • USPS Secure Destruction
    • Getting data & results
      • Tracking your mail
      • Mail analytics
      • Measuring attribution
      • Using webhooks
      • Exporting mail data
  • 🏠Address Verification
    • Ready to start AV?
      • US AV product suite
      • International AV suite
      • AV pricing
    • AV best practices
    • AV integrations & libraries
      • AV Elements
      • Shopify App: Address Cleanser
    • AV FAQs
  • 💻Developer Docs
    • API quickstart guide
    • SDKs & libraries
    • Postman & similar tools
    • Error reference
    • Upgrading API version
    • Technical use case guides
      • Mass deletion setup
      • NCOA responses
      • Override cancellation window
      • Visibility of address changes
      • Ingesting tracking events with webhooks
  • 🔑Account Management
    • Signing into Lob
    • API keys
    • Account settings
      • Account-level data logs
    • User settings
    • Billing
      • Lob Credits
      • Lob Payment Methods
      • Sales Tax FAQ
        • Applicable sales tax by state
          • ​Subscriptions and Services
          • Lob Audience
          • Delivery Location for Operational Mail
          • Customer Billing Address for Operational Mail
          • Delivery Location for Marketing Mail
          • Postage Exemption
          • Professional Services
        • Tax exemption guide
  • 📞Resources
    • Getting support
    • Security & privacy
    • Data retention
    • Sustainability
    • Private labeling Lob
    • Direct mail glossary
Powered by GitBook
On this page
  • Overview
  • Getting Started
  • Connect Segment to Lob using Destination Functions:
  • Segment Events by Mail Form Factor
  • Conclusion
  • Resources

Was this helpful?

Export as PDF
  1. Print & Mail
  2. Integrations
  3. API integrations

Segment

PreviousSalesforce Marketing CloudNextSimon Data

Last updated 8 months ago

Was this helpful?

Overview

is a platform that captures and stores all first-party customer data regarding your product or service in a centralized place. More specifically, Segment collects events from your interfaces (websites, web apps, etc.), and from that information, helps you create more personalized customer experiences across various channels.

We will plug Lob into our Segment flow by making a custom destination function. Destinations are business tools or apps to which you can send the data you collect in Segment. Depending on which mailpiece form factor you want to send (postcard, letter, etc.), building a destination function that sends it merely involves reading the data and calling Lob’s API. These steps are outlined below.

Getting Started

  • Make sure you have a and your . It is highly recommended that you use your (secret) test API key first

  • Have a ready to use (hosted PDF file or HTML template)

  • Have your ready

Connect Segment to Lob using Destination Functions:

Learn more about destination functions API at

  1. In the sidebar, navigate to “Connections” -> “Catalog,” and then click the Functions tab:

  1. Click the “New Function” button:

  1. Under “Select Function Type,” click “Destination,” and then click “Build”:

  1. Give the function a name (required), description, and logo, and click “Create Function” to save:

Segment Events by Mail Form Factor

The following are sample functions to send a Lob mailpiece from a given Segment event, organized by mailpiece. Segment provides six different event types that destination functions can operate on:

The following sample code translates Track events into Lob mailpieces by defining an onTrack function. (For other functionalities, just define a similarly named function, e.g., onPage for Page events.)

Postcards
/**
* @param {SpecTrack} event The track event
* @param {Object.<string, any>} settings Custom settings
* @return any
*/
async function onTrack(event, settings) {
 const body = {
   description: 'Description of the card,'
   to: {
     name: event.properties.name,
     address_line1: event.properties.address.line1,
     address_line2: event.properties.address.line2,
     address_city: event.properties.address.city,
     address_state: event.properties.address.state,
     address_zip: event.properties.address.zip
   },
   front:
     "<html style='padding: 1in; font-size: 50;'>Front side for {{name}}</html>",
   back: "<html style='padding: 1in; font-size: 20;'>Back side for {{name}}</html>",
   merge_variables: {
     name: event.properties.name
   }
 };


 const response = await fetch('https://api.lob.com/v1/postcards', {
   method: 'POST',
   headers: {
     Authorization: `Basic ${btoa(settings.apiKey + ':')}`,
     'Content-Type': 'application/json'
   },
   body: JSON.stringify(body)
 });


 return response.json();
}

Letters
/**
* Handle track event
* @param  {SegmentTrackEvent} event
* @param  {FunctionSettings} settings
*/
async function onTrack(event, settings) {
 const body = {
   description: 'Description of the letter',
   to: {
     name: event.properties.name,
     address_line1: event.properties.address.line1,
     address_line2: event.properties.address.line2,
     address_city: event.properties.address.city,
     address_state: event.properties.address.state,
     address_zip: event.properties.address.zip
   },
   from: {
     name: event.properties.return_addr.name,
     address_line1: event.properties.return_addr.line1,
     address_line2: event.properties.return_addr.line2,
     address_city: event.properties.return_addr.city,
     address_state: event.properties.return_addr.state,
     address_zip: event.properties.return_addr.zip
   },
   file: "<html style='padding: 1in; font-size: 50;'>Front side for {{name}}</html>",
   color: 'false',
   use_type: 'marketing',
   merge_variables: {
     name: event.properties.name
   }
 };


 const response = await fetch('https://api.lob.com/v1/letters', {
   method: 'POST',
   headers: {
     Authorization: `Basic ${btoa(settings.apiKey + ':')}`,
     'Content-Type': 'application/json'
   },
   body: JSON.stringify(body)
 });


 return response.json();
}
Self Mailers
/**
* Handle track event
* @param  {SegmentTrackEvent} event
* @param  {FunctionSettings} settings
*/
async function onTrack(event, settings) {
 const body = {
   description: 'Description of the self-mailer',
   to: {
     name: event.properties.name,
     address_line1: event.properties.address.line1,
     address_line2: event.properties.address.line2,
     address_city: event.properties.address.city,
     address_state: event.properties.address.state,
     address_zip: event.properties.address.zip
   },
   inside:
     "<html style='padding: 1in; font-size: 50;'>Inside side for {{name}}</html>",
   outside:
     "<html style='padding: 1in; font-size: 20;'>Outside side for {{name}}</html>",
   use_type: 'marketing',
   merge_variables: {
     name: event.properties.name
   }
 };


 const response = await fetch('https://api.lob.com/v1/self_mailers', {
   method: 'POST',
   headers: {
     Authorization: `Basic ${btoa(settings.apiKey + ':')}`,
     'Content-Type': 'application/json'
   },
   body: JSON.stringify(body)
 });


 return response.json();
}
Checks
/**
* Handle track event
* @param  {SegmentTrackEvent} event
* @param  {FunctionSettings} settings
*/
async function onTrack(event, settings) {
 const body = {
   description: 'Description of the check',
   to: {
     name: event.properties.name,
     address_line1: event.properties.address.line1,
     address_line2: event.properties.address.line2,
     address_city: event.properties.address.city,
     address_state: event.properties.address.state,
     address_zip: event.properties.address.zip
   },
   from: {
     name: event.properties.return_addr.name,
     address_line1: event.properties.return_addr.line1,
     address_line2: event.properties.return_addr.line2,
     address_city: event.properties.return_addr.city,
     address_state: event.properties.return_addr.state,
     address_zip: event.properties.return_addr.zip
   },
   bank_account: 'bank_a4fc08e61e12c6c',
   message: 'INSERT MESSAGE HERE',
   amount: 0, //Insert an amount here
   use_type: 'marketing',
   merge_variables: {
     name: event.properties.name
   }
 };


 const response = await fetch('https://api.lob.com/v1/checks', {
   method: 'POST',
   headers: {
     Authorization: `Basic ${btoa(settings.apiKey + ':')}`,
     'Content-Type': 'application/json'
   },
   body: JSON.stringify(body)
 });


 return response.json();
}

Remember to test your mail sent through Segment by using your test API key first. Once you do, plug in your live key, and enjoy sending intelligent, automated mail pieces with Lob and Segment!

Conclusion

Given how useful Segment is for integrating multiple different interfaces for collecting and operating on customer data, this tutorial gives us the ability to add Lob as one of many possible powerful tools for accomplishing data-driven, instantaneous operations on that data. Luckily, plugging Lob into Segment is as easy as making a destination function and using it in your workflows.

Resources

Here are two other resources that might help with crafting your workflow:

Enter your Javascript code in the editor on the left, and test your function on the right; refer to on form factors for details. Click “Configure” when done:

: who is the customer?

: what are they doing?

: what web page are they on?

: what app screen are they on?

: what account or organization are they part of?

: what was their past identity?

📬
Identify
Track
Page
Screen
Group
Alias
Segment's docs on connections, the meat and potatoes of making workflows
the following section
Segment
Lob account
API keys
creative file
Segment account
https://segment.com/docs/connections/destinations/destination-functions