Skip to main content
Human guide: work with your agent → Inspect one Enformion action before starting provider-backed work. Your first result is a verified input and output contract.

Provider-specific requirements

Consumer skip-trace API (Galaxy) for finding an individual’s personal contact info — personal emails and mobile phones — from name + city/state. Tool quick-pick:
  • Reverse phone lookup → enformion_reverse_phone_search (ReversePhone. Returns everyone associated with a number, including historical associations). Treat results as candidates, not proof of current ownership.
  • LinkedIn profile lookup → enformion_linkedin_id (LinkedinID. resolves a LinkedIn profile URL to a person record).
  • Property/address lookup → enformion_property_v2_search (PropertyV2. supports free-form, TahoeId, and structured address searches).
  • Personal email → enformion_person_search (Person database. Returns emailAddresses[] flagged nonBusiness:1). Do NOT use enformion_workplace_search for personal email — it returns other-employer work emails.
  • Personal mobile (phone-first) → enformion_contact_enrich (skip-trace, ~53% mobile hit rate).
  • Officers of a business → enformion_business_search → officer tahoeId → enformion_person_search by tahoeId.

When to use

Use enformion_contact_enrich when you need to find the personal mobile of a small business owner (restaurant, retail, local services) who has:
  • No LinkedIn profile
  • No company domain email
  • No B2B database presence
This is the right tool after you’ve already extracted the owner’s name from a public source (Google search, Yelp, SOS officer records, OpenMart staff).

Critical gotchas — read before calling

1. Strip middle initials from last_name (automatic)

The integration automatically strips middle initials. You do NOT need to pre-process — just pass the raw last name. But be aware:
  • "K Tarzai" → bare last = "Tarzai" ✓
  • "De La Cruz Castillo" → bare last = "Castillo" ✓
  • "Smith Jr." → bare last = "Smith" ✓
If you want to override this, pass only the bare last word yourself.

2. FL SOS officer names (use reverseFlOfficerName helper)

Florida SOS returns officer names as "LASTNAME, FIRSTNAME MIDDLE". You must reverse these before calling:
  • "SMITH, JOHN EDWARD" → "John Smith" ✓
  • "DE LA CRUZ, MARIA" → "Maria De La Cruz" ✓
The helper reverseFlOfficerName() is exported from actions/enformion-shared.ts.

3. Rate limits

No documented rate limit, but runs degrade with >200 concurrent requests. The Deepline rate limiter caps at 10 req/s which is safe for all batch sizes.

4. No-result interpretation

  • identityScore: 0 = no match found (not billed)
  • identityScore: 75–100 = high confidence match
  • person.phones[] empty = found the person but no phone on record

Response structure

Extract the mobile: person.phones.find(p => p.type === "mobile" && p.isConnected === true)?.number

Validation

After finding a phone via EnformionGO, validate it with trestle_phone_validation:
  • line_type: "Mobile" + activity_score >= 60 = confirmed owner mobile
  • line_type: "Landline" or line_type: "FixedVOIP" = store/office phone — discard

Credentials

Requires two custom headers set from stored credentials:
  • galaxy-ap-name: your API key name
  • galaxy-ap-password: your API key password
Set via Deepline dashboard → Integrations → EnformionGO, or via ENFORMION_KEY_NAME + ENFORMION_KEY_PASSWORD environment variables. API endpoint: https://devapi.enformion.com/Contact/Enrich API endpoint: https://devapi.enformion.com/ReversePhoneSearch (galaxy-search-type: ReversePhone). Pass phone. optional pagination is supported. Reverse Phone returns all people associated with the number, which can include old owners, employees, or prior residents. API endpoint: https://devapi.enformion.com/PropertyV2Search (galaxy-search-type: PropertyV2). Use free_form_search, tahoe_id, or structured address fields.

When to use

Use enformion_person_search to look for personal email addresses or phone numbers. It uses Galaxy Person Search (galaxy-search-type: Person). Personal addresses carry nonBusiness: 1. Workplace Search can return email addresses for another employer. Do not treat those addresses as the target business’s contact details. Two lookup modes:
  • By name + city/state — the common path. enformion_person_search({ first_name, last_name, city_state }).
  • By tahoe_id — exact-person lookup. Pass { tahoe_id } to pin one identity (e.g. an officer tahoeId returned by enformion_business_search). When tahoe_id is set, the name/location fields are ignored.
Middle initials and compound surname prefixes are stripped automatically (same silent-zero-result bug as Contact/Enrich). To get the personal contact info of a business’s officers/agents:
  1. enformion_business_search({ name, city_state }) → business record with officers[] / agents, each carrying a tahoeId.
  2. For each officer, enformion_person_search({ tahoe_id }) → that person’s emailAddresses[] + phoneNumbers[].
Entitlement note: Galaxy Business Search requires a separate entitlement. An unavailable entitlement returns isError: true with “Access Profile does not permit client to call Business Search.” If you already have a verified officer name, consider Person Search by name. Check that your account supports Person Search first. It can return personal contact data, but a match is not guaranteed.
Extract the best personal email: persons[0].emailAddresses[0].emailAddress (prefer entries with isPremium: true). No result: persons is an empty array.

Billing

Billed per match (post_deduct) only when the top match has a personal email or a connected phone. No charge on empty / no-match. API endpoint: https://devapi.enformion.com/PersonSearch (galaxy-search-type: Person). Business Search endpoint: https://api.galaxysearchapi.com/BusinessV2Search (galaxy-search-type: BusinessV2, body uses camelCase businessName + addressLine2). Note the different host from the other endpoints — Business Search is served from api.galaxysearchapi.com, not devapi.enformion.com.

When to use

Use enformion_workplace_search as a fallback when enformion_contact_enrich returns identityScore: 0 or an empty phones array. It queries a separate B2B employment profile database and has a different rate-limit bucket, so it does not compete with Contact/Enrich capacity. city_state is optional here (unlike Contact/Enrich where it is required). Omitting it broadens the match at the cost of potentially more ambiguous results.

Critical warning: emailAddresses[]

emailAddresses[] in Workplace Search results are almost always the owner’s OTHER employer (a corporate day job, a franchise group, etc.) and NOT the restaurant’s email. In practice:
  • A returned email address can belong to another employer. Verify the domain against the intended business.
  • Only use an email address if the domain matches the target restaurant’s domain (e.g., gary@lincolnautogroup.com is useless if you want gary@lincolndiner.com).

Rate-limit bucket

Workplace Search uses a separate rate-limit bucket from Contact/Enrich. Both can run concurrently without reducing each other’s throughput. The Deepline rate limiter treats them as independent pools.

Response structure

Extract phone: workplaceRecords[0]?.phoneNumbers?.[0] No result: workplaceRecords will be an empty array [].

Billing

Billed per match (post_deduct) only when a workplace record with a phone or email is returned. No charge on empty / no-match.

Find an applicable action

Confirm your effective workspace, then search the live catalog:
Search returns candidates. Check the returned provider and operation rather than selecting a similar title automatically.

Inspect the selected contract

Replace <returned-tool-id> with the identifier returned by discovery:
These commands do not execute the selected provider action. Read its required inputs, supported access mode, pricing unit, outputs, and limits. A connection does not establish that every action supports BYOK. Follow the provider-specific requirements above and the live action contract.

Prepare one reviewed input

Use one authorized record that matches the inspected schema. Preserve its source identity and define the result you will accept. Open the action reference for its payload and response shape. Provider-backed execution can incur usage or external effects. For reusable logic, follow Write Plays. For direct-call recovery, use Tool execution recovery.
Continue only when the workspace, provider, required fields, acceptance rule, and applicable price are understood. Keep unavailable access separate from no-result evidence.