Issue payments with secure, branded checks

Try it Now Full Pricing

Generate recurring, custom checks at scale

With Lob, you can set up triggered delivery of customized checks that reinforce your brand. In addition to a logo and memo, include instructions, invoice information, and more to make payments as clear as possible.

Send with state of the art security

Lob has delivered over $70M in payments with secure checks. Each check is sent with a colored background, watermarks, micro-printed borders, thermal ink that disappears when rubbed, and Magnetic Ink Character Recognition (MICR) encoding to facilitate bank processing and reduce errors.

Make sure your checks are delivered

There's no need to wonder if your checks have been printed or delivered. With Lob, you can track their progress through the mail and make sure each check makes it way to its intended recipient, at no additional cost.

Simple, on-demand pricing

Lob's prices are determined based on your volume over time—not batch by batch. Printing, mailing, and postage are all included in one low price. Start by paying for only what you send, or leverage our subscription plans to see additional savings and gain access to special features. No setup costs or guesswork, only the clearest billing structure possible to help you get up and running smoothly.

Pricing Calculator

$1.50 per check

Check out our pricing plans for further discounts at higher volumes.

Full Pricing

See how SeatGeek uses Lob to automate rebate payments

SeatGeek switched from manually printing, signing, enveloping, stamping, and mailing rebate checks for all new signups to automating it all through Lob. Lob's unbeatable SLAs and check-by-check tracking allow the team to make sure that the rebates they are issuing get to their customers as quickly as possible. Read more…

Easy integration via REST API

Submit your template along with a shipping address in one simple API call. Integration is dead simple with pre-built wrappers and code examples in Ruby, Python, PHP, Java, and Node.js

Read the Docs View Libraries
  • curl

  • Node

  • Ruby

  • Python

  • PHP

  • Java

    curl \
      -u test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc: \
      -d "description=Demo Check" \
      -d "to=adr_d3489cd64c791ab5" \
      -d "from=adr_eae4448bb64c07f0" \
      -d "bank_account=bank_8cad8df5354d33f" \
      -d "amount=22.50" \
      -d "memo=rent" \
      --data-urlencode "check_bottom=<h1 style='padding-top:4in;'>Demo Check for {{name}}</h1>" \
      -d "merge_variables[name]=Harry"
      description: 'Demo Check',
      bank_account: 'bank_8cad8df5354d33f',
      to: 'adr_d3489cd64c791ab5',
      from: 'adr_eae4448bb64c07f0',
      amount: 22.50,
      memo: 'rent',
      check_bottom: '<h1 style="padding-top:4in;">Demo Check for {{name}}</h1>',
      merge_variables: {
        name: 'Harry'
    }, function (err, res) {
      console.log(err, res);
      description: "Demo Check",
      bank_account: "bank_8cad8df5354d33f",
      to: "adr_d3489cd64c791ab5",
      from: "adr_eae4448bb64c07f0",
      amount: 22.50,
      memo: "rent",
      check_bottom: "<h1 style='padding-top:4in;'>Demo Check for {{name}}</h1>",
      merge_variables: {
        name: "Harry"
      description = 'Demo Check',
      to_address = 'adr_d3489cd64c791ab5',
      from_address = 'adr_eae4448bb64c07f0',
      bank_account = 'bank_8cad8df5354d33f',
      amount = 22.50,
      memo = 'rent',
      check_bottom = '<h1 style="padding-top:4in;">Demo Check for {{name}}</h1>',
      merge_variables = {
        'name': 'Harry'
      'description'           => 'Demo Check',
      'to'                    => 'adr_d3489cd64c791ab5',
      'from'                  => 'adr_eae4448bb64c07f0',
      'bank_account'          => 'bank_8cad8df5354d33f',
      'amount'                => 22.50,
      'memo'                  => 'rent',
      'check_bottom'          => '<h1 style="padding-top:4in;">Demo Check for {{name}}</h1>',
      'merge_variables[name]' => 'Harry'
    final Map<String, String> mergeVariables = Maps.newHashMap();
    mergeVariables.put("name", "Harry");
    final CheckRequest checkRequest = CheckRequest.builder()
      .checkBottom("<h1 style='padding-top:4in;'>Demo Check for {{name}}</h1>")
    final CheckResponse check = client.createCheck(checkRequest).get();