Bird
Bird

A world of possibilities.
One place to start.

Lookup / Compare

Bird vs Twilio Lookup for phone-number lookup

Compare the answers your application needs, their meaning and their cost. A field-by-field decision test is more useful than counting data packages.

Where Twilio Lookup fits

Twilio Lookup v2 provides phone-number information with optional intelligence packages. Package selection and returned fields should be mapped individually when changing a lookup integration.

Read Twilio Lookup documentation

Where Bird fits

Bird returns base phone-number data and requested optional properties. Each optional property has a status, so your application can preserve the difference between an answer and an unavailable signal.

Explore Bird Lookup

Compare the integration you will operate

CapabilityBirdTwilio Lookup
Basic resultRead base fields such as country and line type.Review the base response used by the current Lookup v2 integration.
Additional signalsRequest the properties used by your application and inspect their status.Map the selected intelligence packages and the fields your rules consume.
Decision handlingKeep unanswered properties distinct from negative values.Identify how the current application treats missing or failed package results.

Run the same customer journey

Replay a permitted sample of representative inputs through a staging integration. Compare the resulting application decisions, not just JSON names. Include unavailable signals and corrected customer input.

Start the working example

Make the switch deliberately

Create a mapping for each consumed field and add an explicit unknown branch. Move traffic after the new rules produce the intended routing or verification decision.

Migrate from Twilio Lookup

Inspect the number before you act.

Run the receiving lookup and map the returned fields to your application. Number metadata does not by itself establish reachability, customer identity or permission to message.

Run the complete quickstart ↗
npm install @messagebird/sdk
const answer = await bird.lookup.phoneNumber({
  phone_number: "+31612345678",
  type: ["classification", "score"],
});
console.log(answer.country_code, answer.line_type);
// Only a block whose status is ok carries a value, and only that one is billed.
if (answer.score?.status === "ok") console.log(answer.score.value);

Questions before switching

Does a lookup verify who owns the number?
No. Number information supports routing and risk decisions. Use a possession check when the customer must demonstrate control of the destination.
How should I handle an unavailable property?
Keep it unknown. Read the property status before using a value and define the next application step explicitly. Do not convert missing information into false, zero or a successful identity check.

Test it with your own workflow.

Start with the guide, or bring your integration and migration requirements to our team.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Read docs
Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:
Cursor