X lead generation form fields: work email, job title, company

X's lead generation docs list contact and user-information fields, including WORK_EMAIL, JOB_TITLE and COMPANY_NAME. Pick fields to match each ad variant.

4 min readSume
All posts

X's lead generation documentation lists contact fields (EMAIL, PHONE_NUMBER, STREET_ADDRESS, CITY, STATE, COUNTRY, ZIP_CODE) and user-information fields (FULL_NAME, FIRST_NAME, LAST_NAME, DATE_OF_BIRTH, COMPANY_NAME, JOB_TITLE, WORK_EMAIL, WORK_PHONE_NUMBER, GENDER, HANDLE). For a B2B offer, WORK_EMAIL, COMPANY_NAME and JOB_TITLE are the natural trio, and you can hold a field list per creative variant in your own bulk run plan.

Fields by group

Field types from X's lead generation documentation (read 2026-10-05)
GroupField types
ContactEMAIL, PHONE_NUMBER, STREET_ADDRESS, CITY, STATE, COUNTRY, ZIP_CODE
User informationFULL_NAME, FIRST_NAME, LAST_NAME, DATE_OF_BIRTH, COMPANY_NAME, JOB_TITLE, WORK_EMAIL, WORK_PHONE_NUMBER, GENDER, HANDLE

Keep a field plan next to the creative plan

A small map keeps each variant paired with the fields its form asks for. The names below are the documented field types.

import json

VALID = {"EMAIL", "PHONE_NUMBER", "STREET_ADDRESS", "CITY", "STATE", "COUNTRY", "ZIP_CODE",
         "FULL_NAME", "FIRST_NAME", "LAST_NAME", "DATE_OF_BIRTH", "COMPANY_NAME",
         "JOB_TITLE", "WORK_EMAIL", "WORK_PHONE_NUMBER", "GENDER", "HANDLE"}
plan = {"hook-a": ["WORK_EMAIL", "COMPANY_NAME", "JOB_TITLE"], "hook-b": ["EMAIL", "FULL_NAME"]}
for variant, fields in plan.items():
    bad = [f for f in fields if f not in VALID]
    print(variant, "ok" if not bad else f"unknown: {bad}")
print(json.dumps(plan))

Ask for less

Every extra field is another reason to leave the form; start with the fewest your sales team can act on.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume