Mass mail entire zip codes to reach potential customers

Try it Now Full Pricing

Target customers based on location

Launching a new service in a new area and want to let future customers know? With area mail, simply identify the neighborhoods you want to target and deliver your piece to every active address in the area.

Get zipcode-based demographic information

When you input a zipcode, the Lob API provides demographic information about the audience, helping you find the right areas to target. You'll find age and income data as well as the residential vs. business split.

Simple, on-demand pricing

With Lob, you only pay for what you send. No setup costs, minimums, or guesswork. Printing, mailing, and postage are all included in one low price.

Price Per Address # of Addresses
$0.778 500 - 999
$0.578 1,000 - 1,499
$0.523 1,500 - 1,999

Save more when you send more. See our full pricing for higher volumes.

Full Pricing

Easy integration via REST API

Submit your template along with your desired zip codes or routes and Lob takes care of the rest. Integration is dead simple with libraries and code examples in Ruby, Node.js, Python, and more.

Read the Docs View Libraries
  • curl

  • Node

  • Ruby

  • Python

  • PHP

  • Java

    curl \
      -u test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc: \
      --data-urlencode "front=<h1>Demo Area Mail to {{city}}</h1>" \
      --data-urlencode "back=<h1>Back Area Mail to {{city}}</h1>" \
      -d "merge_variables[city]=Oakland" \
      -d "routes=94158-C001" \
      -d "routes=94107-C031"
      front: '<h1>Demo Area Mail to {{city}}</h1>',
      back: '<h1>Back Area Mail to {{city}}</h1>',
      merge_variables: {
        city: 'Oakland'
      routes: ['94158-C001', '94107-C031']
    }, function (err, res) {
      console.log(err, res);
      front: "<h1>Demo Area Mail to {{city}}</h1>",
      back: "<h1>Back Area Mail to {{city}}</h1>",
      merge_variables: {
        city: "Oakland"
      routes: ["94158-C001", "94107-C031"]
      front = '<h1>Demo Area Mail to {{city}}</h1>',
      back = '<h1>Back Area Mail to {{city}}</h1>',
      merge_variables = {
        'city': 'Oakland'
      routes = ['94158-C001','94107-C031']
      'routes'                => '94158-C001',
      'routes'                => '94107-C031',
      'front'                 => '<h1>Demo Area Mail to {{city}}</h1>',
      'back'                  => '<h1>Back Area Mail to {{city}}</h1>',
      'merge_variables[city]' => 'Oakland'
    final Map<String, String> mergeVariables = Maps.newHashMap();
    mergeVariables.put("city", "Oakland");
    final ZipCodeRouteId zipCodeRouteId1 = ZipCodeRouteId.parse("94158-C001");
    final ZipCodeRouteId zipCodeRouteId2 = ZipCodeRouteId.parse("94107-C031");
    final RouteId routeId1 = zipCodeRouteId1.getRouteId();
    final RouteId routeId2 = zipCodeRouteId2.getRouteId();
    final AreaMailRequest areaMailRequest = AreaMailRequest.builder()
      .front("<h1>Demo Area Mail to {{city}}</h1>")
      .back("<h1>Back Area Mail to {{city}}</h1>")
      .routesForIds(routeId1, routeId2)
    final AreaMailResponse areaMail = client.createAreaMail(areaMailRequest).get();