Types are the data standardization engine of LeadConduit. They transform the messy, inconsistent data that arrives from various sources into clean, structured, and predictable formats that systems can reliably process. Think of types as intelligent parsers that not only validate data but also extract meaningful components and metadata.
At their core, types solve three fundamental problems:
Format Chaos: Lead data comes from everywhere with different formats - phone numbers as "(512) 789-1111" vs "512-789-1111" vs "5127891111", states as "TX" vs "Texas" vs "tx". This creates chaos both inbound (accepting leads) and outbound (delivering to external systems).
Validation Dilemma: Traditional systems reject misformatted data, but in lead distribution you can't control input formats, rejecting leads means lost revenue, and different buyers have different requirements.
Hidden Value: Valuable data is embedded within strings (area codes, domains, ZIP codes, age from DOB) requiring complex string manipulation to extract.
Parse-Normalize-Use Pattern: Every type follows three steps: Parse (accept various formats), Normalize (convert to consistent format), Use (access standardized data and components in flows).
Example: "(512) 789-1111" → { raw: "(512) 789-1111", normal: "5127891111", area: "512", exchange: "789", line: "1111", valid: true }
Normalization Benefits:
State equals "TX" instead of separate rules for "tx", "texas", "Texas", etc.Component Extraction: Types automatically extract valuable components without string manipulation:
Graceful Validation: The valid component marks data quality without stopping processing. Invalid data doesn't break flows - it's marked for you to handle as needed. Use Phone 1 > Valid is true in rules to filter based on data quality.
Raw Value Preservation: Every type preserves the original input as raw for audit trails, troubleshooting, and integration flexibility.
Privacy-Focused Analytics: Types support aggregation for reporting while excluding sensitive information (usernames from emails, line numbers from phones).
| Type | Primary Use | Key Components | Common Field Examples |
|---|---|---|---|
| Phone | Contact numbers | area, exchange, line, type, is_tollfree | Phone 1, Mobile Phone, Work Phone |
| Contact emails | domain, user, host, is_free, is_disposable | Email, Work Email, Co-Borrower Email | |
| String | General text | none | Comments, Description, Custom fields |
| Number | Numeric data | none | Loan Amount, Income, Credit Score |
| Boolean | Yes/no values | none | Opt In, Has Insurance, Accept Terms |
| Date | Date values | none | Application Date, Move Date |
| DOB | Birth dates (masked) | age, year (processing only) | DOB, Co-Borrower DOB |
| State | US states/provinces | name | State, Property State |
| Postal Code | ZIP/postal codes | zip, country_code, fsa, outcode | Postal Code, Property Postal Code |
| SSN | Social Security (masked) | first_three, middle_two, last_four (processing only) | Social Security Number |
| First Name | Given names | none | First Name, Co-Borrower First Name |
| Last Name | Family names | none | Last Name, Co-Borrower Last Name |
| City | City names | none | City, Property City |
| Street | Street addresses | number, name | Address 1, Property Address |
| Gender | Gender values | abbr | Gender, Applicant Gender |
| Range | Numeric ranges | min, max, mid, average | Age Range, Income Range |
| Time | Date/time values | none | Submission Time, Appointment Time |
| URL | Web addresses | protocol, host, path, query | Landing Page URL, Referrer URL |
| Credential | Passwords/keys (masked) | none | API Secret, Password |
| IP | IP addresses | is_ipv4, ipv6_format | IP Address, Source IP |
| TrustedForm URL | TrustedForm certificates | certificate_id, type, is_web | TrustedForm Certificate URL |
Comprehensive phone number parsing and validation for US/Canada numbers with real-world verification.
Geographic Limitation: Currently only supports US and Canadian phone numbers. International numbers from other countries will be marked as invalid (valid: false) and will not parse correctly, even if they have a valid format in their home country.
Advanced Validation: The valid property indicates more than just format correctness - it verifies:
This means a phone number like "(999) 555-1234" would be invalid even though the format is correct, because 999 is not a real area code.
What It Does NOT Verify: The validation does NOT check if:
A number can pass type validation but still be disconnected or undeliverable.
Components:
Type Hints: Append h (home), w (work), m (mobile), or c (cell) to set type
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
Valid US Numbers (real area codes and exchanges):
"(512) 789-1111" → area: "512", exchange: "789", line: "1111"
"512-789-1111" → "5127891111"
"512.789.1111" → "5127891111"
Invalid Despite Good Format (fake area code):
"(999) 555-1234" → valid: false (999 not a real area code)
"(123) 456-7890" → valid: false (123 not a real area code)
With Extensions:
"5127891111x123" → extension: "123"
"5127891111 x 43" → extension: "43"
Toll-Free:
"8775551212" → is_tollfree: true
"1-800-555-1212" → is_tollfree: true
With Type Hints:
"5127891111m" → type: "mobile"
"5127891111h" → type: "home"
Masked Numbers:
"1-(512) *** ****" → valid: true (masked)
"**********" → valid: true (fully masked)
International (will NOT parse correctly):
"+49 30 22610" → valid: false (not US/Canadian format)
"+44 1484 519892" → valid: false (not US/Canadian format)
Note: International numbers are not supported unless they coincidentally match US/Canadian patterns
Invalid inputs (valid=false):
"donkey kong" (not a number)"964523331" (too short)"(999) 555-1234" (invalid area code)"(512) 999-1111" (invalid exchange for 512 area code)Field Examples: Phone 1, Phone 2, Mobile Phone, Work Phone
Common Component Usage:
Phone 1 > Area equals "512"Phone 1 > Is Tollfree is true{{Phone 1 > Area}}-{{Phone 1 > Exchange}}-{{Phone 1 > Line}}Phone 1 > Valid is trueImportant Limitation: The valid property only confirms the area code and exchange are legitimate - it does NOT verify the full number is connected or deliverable. The "line" portion (last 4 digits) could still be invalid or disconnected. For true deliverability verification, use third-party Add-On services like Trestle, Telesign, or BriteVerify in a flow step to collect carrier-level metadata, then evaluate the appended data in a subsequent filter step to block disconnected numbers.
Comprehensive email parsing with domain analysis and validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
Standard:
"user@domain.com" → user: "user", domain: "domain.com"
"John.Doe@Gmail.com" → "john.doe@gmail.com" (auto-lowercased)
Plus Addressing:
"user+tag@domain.com" → user: "user+tag"
"test+hola@domain.com" → valid: true
With Spaces:
" user@domain.com " → "user@domain.com" (trimmed)
"p. j. butter@gmail.com" → valid: true
Free Email Detection:
"user@gmail.com" → is_free: true
"user@yahoo.com" → is_free: true
"user@company.com" → is_free: false
Disposable Detection:
"user@mailinator.com" → is_disposable: true
"user@10minutemail.com" → is_disposable: true
Invalid inputs (valid=false): "Asdf" (no @), "hello@//gmail.xn--om.3ia"
Field Examples: Email, Work Email, Co-Borrower Email
Common Component Usage:
Email > Domain equals "company.com"Email > Is Free is true{{Email > User}}Simple string type for given names with basic validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidmatches pattern / does not match patternExamples:
"John" → "John"
"Mary-Jane" → "Mary-Jane"
"José" → "José"
" Alice " → "Alice" // Whitespace trimmed
Field Examples: First Name, Co-Borrower First Name
Simple string type for family names with basic validation.
Components:
Operators: Same as First Name type
Examples:
"Smith" → "Smith"
"O'Brien" → "O'Brien"
"García-López" → "García-López"
Field Examples: Last Name, Co-Borrower Last Name
Special date type that adds age calculation and is maskable for privacy.
Components:
Maskable: Yes
Operators: Same as Date type
Examples:
During processing:
"1990-01-15" → {
raw: "1990-01-15",
age: 34.9,
year: 1990,
valid: true
}
After processing (stored as): "****-**-**"
No components accessible - all values masked
Field Examples: DOB, Mortgage Co-Borrower DOB, Spouse DOB
Parses gender values with abbreviation support.
Valid Inputs:
m, male, M, Male, MALE (case insensitive)f, female, F, Female, FEMALE (case insensitive)o, other, O, Other, OTHER (case insensitive)" m " → maleComponents:
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidExamples:
"male" → { "f" → {
normal: "male", normal: "female",
raw: "male", raw: "f",
abbr: "M", abbr: "F",
valid: true valid: true
} }
"MALE" → "male" "other" → abbr: "O"
" m " → "male" "O" → "other"
Invalid inputs (valid=false): "50", "asdf", 5, true
Field Examples: Gender, Applicant Gender
US Social Security Number parsing with masking for privacy.
Components:
Maskable: Yes
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
During processing:
"123456789" → first_three: "123", middle_two: "45", last_four: "6789"
"123-45-6789" → "123456789" (dashes removed)
"123 45 6789" → "123456789" (spaces removed)
"123.45.6789" → "123456789" (dots removed)
" 123-45-6789 " → "123456789" (trimmed)
"donkey 123456789" → "123456789" (text ignored)
After processing (stored as): "*********"
No components accessible - all values masked
Invalid inputs (valid=false): "abcd", "", " "
Field Examples: Social Security Number
Common Component Usage (During Processing Only):
Social Security Number > Last Four equals "1234"{{Social Security Number > Last Four}}Social Security Number > Valid is trueNote: After processing completes, these components are NOT available
Street address parsing with number and name extraction.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
"123 Main Street" → number: "123", name: "Main Street"
"4203 Guadalupe St" → number: "4203", name: "Guadalupe St"
" 123 Main St " → "123 Main St" (trimmed)
Invalid inputs (valid=false): "Main Street" (no number), "Asdf"
Field Examples: Address 1, Property Address
Simple string type for city names with no format validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
"Austin" → "Austin"
"Dallas" → "Dallas"
"San Francisco" → "San Francisco"
" Chicago " → "Chicago" // Whitespace trimmed
Field Examples: City, Property City, Employer City
US states and Canadian provinces with abbreviation normalization.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneincludes / does not includeis included in / is not included inExamples:
US States:
"TX" → name: "Texas"
"tx" → "TX" (auto-uppercased)
"Texas" → "TX"
"texas" → "TX"
Canadian Provinces:
"ON" → name: "Ontario"
"Quebec" → "QC", name: "Quebec"
Unknown Values (still valid=true):
"DX" → "DX" (unknown but preserved)
"Dexus" → "Dexus"
"DEXUS NEXUS" → "DEXUS NEXUS"
Field Examples: State, Property State, License State
Multi-country postal code parsing supporting US, Canada, and UK formats.
Components:
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
US Formats:
"78704" → zip: "78704"
"78704-1234" → zip: "78704", four: "1234"
"78704 1234" → "78704-1234"
"787041234" → "78704-1234" (9 digits)
"78704-" → "78704" (trailing dash removed)
"78704 - 1234" → "78704-1234" (extra spaces)
Canadian Formats:
"Q2E 4U7" → fsa: "Q2E", ldu: "4U7"
"q2e4u7" → "Q2E 4U7" (auto-formatted)
"q2e 4u7" → "Q2E 4U7" (extra spaces)
UK Formats (5 patterns):
"A1 1AA" → outcode: "A1", incode: "1AA"
"A11AA" → "A1 1AA" (space added)
"AA11 1AA" → valid UK format
"AA11A 1AA" → valid UK format
Invalid inputs (valid=false): "garbage", non-postal code strings
Field Examples: Postal Code, Property Postal Code
Common Component Usage:
Postal Code > ZIP equals "78751"Postal Code > Country Code equals "US"{{Postal Code > ZIP}}Parses boolean values from various string and numeric representations.
Valid Inputs:
y, yes, true, t, 1 (case insensitive)n, no, false, f, 0 (case insensitive)1 → true, 0 → false" true " → trueComponents: None
Operators:
is true / is not trueis false / is not falseis blank / is not blankformat is valid / format is invalidExamples:
"yes" → true "no" → false
"Y" → true "N" → false
"TRUE" → true "FALSE" → false
"t" → true "f" → false
1 → true 0 → false
"1" → true "0" → false
Invalid inputs (return false with valid=false): "50", "asdf", {foo: 42}
Field Examples: Opt In, Accept Prepayment Penalty, Has Insurance
Simple string type for city names with no format validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
"Austin" → "Austin"
"Dallas" → "Dallas"
"San Francisco" → "San Francisco"
" Chicago " → "Chicago" // Whitespace trimmed
Field Examples: City, Property City, Employer City
Handles sensitive credential strings like passwords and API keys. Always masked by default.
Components: None
Maskable: Yes (sensitive data replaced with asterisks)
Operators:
is equal to / is not equal tois blank / is not blankincludes / does not includeis included in / is not included inExamples:
During processing: "sekret-pazzward" → available for integrations
After processing (stored as): "****************"
During processing: "befa4e7379d81173dfe8d1a53deaf591" → available for integrations
After processing (stored as): "********************************"
Field Examples: API Secret, Password, Authentication Token
Parses dates in multiple formats and normalizes to ISO format (YYYY-MM-DD).
Supported Formats:
M/D/YYYY (6/2/2014), M/D/YY (6/2/14), MM-DD-YYYY (06-02-2014)YYYY-MM-DD (2014-06-02)D/M/YYYY (18/7/2014), D-M-YYYY (18-7-2014)MMDDYYYY (06022014), YYYYMMDD (20140602)Mon Jun 02 2014, Jun 02 2014, Fri 18 July 2014Components:
Operators:
is equal to / is not equal tois less than / is less than or equal tois greater than / is greater than or equal tois blank / is not blankformat is valid / format is invalidis between / is not betweenExamples:
"6/2/2014" → "2014-06-02" "06/02/2014" → "2014-06-02"
"6/2/14" → "2014-06-02" "June 2, 2014" → "2014-06-02"
"2014-06-02" → "2014-06-02" "Mon Jun 02 2014" → "2014-06-02"
"06-02-2014" → "2014-06-02" "06022014" → "2014-06-02"
"20140602" → "2014-06-02" "18/07/2014" → "2014-07-18" (European)
Field Examples: Application Date, Move Date, Purchase Date
Special date type that adds age calculation and is maskable for privacy.
Components:
Maskable: Yes
Operators: Same as Date type
Examples:
During processing:
"1990-01-15" → {
raw: "1990-01-15",
age: 34.9,
year: 1990,
valid: true
}
After processing (stored as): "****-**-**"
No components accessible - all values masked
Field Examples: DOB, Mortgage Co-Borrower DOB, Spouse DOB
Comprehensive email parsing with domain analysis and validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
Standard:
"user@domain.com" → user: "user", domain: "domain.com"
"John.Doe@Gmail.com" → "john.doe@gmail.com" (auto-lowercased)
Plus Addressing:
"user+tag@domain.com" → user: "user+tag"
"test+hola@domain.com" → valid: true
With Spaces:
" user@domain.com " → "user@domain.com" (trimmed)
"p. j. butter@gmail.com" → valid: true
Free Email Detection:
"user@gmail.com" → is_free: true
"user@yahoo.com" → is_free: true
"user@company.com" → is_free: false
Disposable Detection:
"user@mailinator.com" → is_disposable: true
"user@10minutemail.com" → is_disposable: true
Invalid inputs (valid=false): "Asdf" (no @), "hello@//gmail.xn--om.3ia"
Field Examples: Email, Work Email, Co-Borrower Email
Common Component Usage:
Email > Domain equals "company.com"Email > Is Free is true{{Email > User}}Simple string type for given names with basic validation.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidmatches pattern / does not match patternExamples:
"John" → "John"
"Mary-Jane" → "Mary-Jane"
"José" → "José"
" Alice " → "Alice" // Whitespace trimmed
Field Examples: First Name, Co-Borrower First Name
Parses gender values with abbreviation support.
Valid Inputs:
m, male, M, Male, MALE (case insensitive)f, female, F, Female, FEMALE (case insensitive)o, other, O, Other, OTHER (case insensitive)" m " → maleComponents:
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidExamples:
"male" → { "f" → {
normal: "male", normal: "female",
raw: "male", raw: "f",
abbr: "M", abbr: "F",
valid: true valid: true
} }
"MALE" → "male" "other" → abbr: "O"
" m " → "male" "O" → "other"
Invalid inputs (valid=false): "50", "asdf", 5, true
Field Examples: Gender, Applicant Gender
Handles both IPv4 and IPv6 addresses with format detection.
Components:
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
IPv4:
"198.51.90.161" → is_ipv4: true, ipv6_format: "::ffff:198.51.90.161"
"198.51.90.161/32" → CIDR notation supported
"http://198.51.90.161:32" → extracted from URL
" 198. 51. 90. 161 " → "198.51.90.161" (spaces removed)
IPv6:
"8faa:230d:52ab:98f3:a2ea:7735:a7b8:72e9" → is_ipv4: false
"[8faa:230d:52ab:98f3:a2ea:7735:a7b8:72e9]" → brackets removed
"8faa:230d:52ab:98f3:a2ea:7735:a7b8:72e9/64" → CIDR notation
"[0000:0000:0000:0000:0000:0000:0000:0001]" → "::1" (compressed)
"[ffff::186.25.192.233]" → "ffff::ba19:c0e9" (IPv4 tail)
Invalid inputs (valid=false): "256.4.5.6", "fe80:2030:31:24" (incomplete IPv6)
Field Examples: IP Address, Source IP
Simple string type for family names with basic validation.
Components:
Operators: Same as First Name type
Examples:
"Smith" → "Smith"
"O'Brien" → "O'Brien"
"García-López" → "García-López"
Field Examples: Last Name, Co-Borrower Last Name
Parses numeric values from strings, handling currency symbols and thousands separators.
Components: None
Operators:
is equal to / is not equal tois less than / is less than or equal tois greater than / is greater than or equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inis between / is not betweenExamples:
"100" → 100 "$1,000.99" → 1000.99
100 → 100 "1,234,567" → 1234567
"1.111" → 1.111 "-11" → -11
"$1100 per month" → 1100 "-$1,100" → -1100
" 1100 " → 1100 "1,100" → 1100
Invalid inputs (valid=false): true, [1], {foo: 'bar'}, "derp", NaN
Field Examples: Loan Amount, Monthly Income, Credit Score
Comprehensive phone number parsing and validation for US/Canada numbers with real-world verification.
Geographic Limitation: Currently only supports US and Canadian phone numbers. International numbers from other countries will be marked as invalid (valid: false) and will not parse correctly, even if they have a valid format in their home country.
Advanced Validation: The valid property indicates more than just format correctness - it verifies:
This means a phone number like "(999) 555-1234" would be invalid even though the format is correct, because 999 is not a real area code.
What It Does NOT Verify: The validation does NOT check if:
A number can pass type validation but still be disconnected or undeliverable.
Components:
Type Hints: Append h (home), w (work), m (mobile), or c (cell) to set type
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
Valid US Numbers (real area codes and exchanges):
"(512) 789-1111" → area: "512", exchange: "789", line: "1111"
"512-789-1111" → "5127891111"
"512.789.1111" → "5127891111"
Invalid Despite Good Format (fake area code):
"(999) 555-1234" → valid: false (999 not a real area code)
"(123) 456-7890" → valid: false (123 not a real area code)
With Extensions:
"5127891111x123" → extension: "123"
"5127891111 x 43" → extension: "43"
Toll-Free:
"8775551212" → is_tollfree: true
"1-800-555-1212" → is_tollfree: true
With Type Hints:
"5127891111m" → type: "mobile"
"5127891111h" → type: "home"
Masked Numbers:
"1-(512) *** ****" → valid: true (masked)
"**********" → valid: true (fully masked)
International (will NOT parse correctly):
"+49 30 22610" → valid: false (not US/Canadian format)
"+44 1484 519892" → valid: false (not US/Canadian format)
Note: International numbers are not supported unless they coincidentally match US/Canadian patterns
Invalid inputs (valid=false):
"donkey kong" (not a number)"964523331" (too short)"(999) 555-1234" (invalid area code)"(512) 999-1111" (invalid exchange for 512 area code)Field Examples: Phone 1, Phone 2, Mobile Phone, Work Phone
Common Component Usage:
Phone 1 > Area equals "512"Phone 1 > Is Tollfree is true{{Phone 1 > Area}}-{{Phone 1 > Exchange}}-{{Phone 1 > Line}}Phone 1 > Valid is trueImportant Limitation: The valid property only confirms the area code and exchange are legitimate - it does NOT verify the full number is connected or deliverable. The "line" portion (last 4 digits) could still be invalid or disconnected. For true deliverability verification, use third-party Add-On services like Trestle, Telesign, or BriteVerify in a flow step to collect carrier-level metadata, then evaluate the appended data in a subsequent filter step to block disconnected numbers.
Multi-country postal code parsing supporting US, Canada, and UK formats.
Components:
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
US Formats:
"78704" → zip: "78704"
"78704-1234" → zip: "78704", four: "1234"
"78704 1234" → "78704-1234"
"787041234" → "78704-1234" (9 digits)
"78704-" → "78704" (trailing dash removed)
"78704 - 1234" → "78704-1234" (extra spaces)
Canadian Formats:
"Q2E 4U7" → fsa: "Q2E", ldu: "4U7"
"q2e4u7" → "Q2E 4U7" (auto-formatted)
"q2e 4u7" → "Q2E 4U7" (extra spaces)
UK Formats (5 patterns):
"A1 1AA" → outcode: "A1", incode: "1AA"
"A11AA" → "A1 1AA" (space added)
"AA11 1AA" → valid UK format
"AA11A 1AA" → valid UK format
Invalid inputs (valid=false): "garbage", non-postal code strings
Field Examples: Postal Code, Property Postal Code
Common Component Usage:
Postal Code > ZIP equals "78751"Postal Code > Country Code equals "US"{{Postal Code > ZIP}}Parses numeric ranges and single numbers, calculating statistical values.
Components:
Operators:
is equal to / is not equal tois less than / is less than or equal tois greater than / is greater than or equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
Range Formats:
"100 to 200" → min: 100, max: 200, mid: 150
"100 - 200" → min: 100, max: 200, mid: 150
"100 200" → min: 100, max: 200 (space only)
Greater Than:
"50+" → min: 50, max: Infinity
"10+" → min: 10, max: null
Single Values:
"100" → min: 100, max: 100, mid: 100
100 → min: 100, max: 100
Decimals:
"5.5" → min: 5.5, max: 5.5
"999.95 to 10000.95" → min: 999.95, max: 10000.95
Currency:
"$1 to $10" → min: 1, max: 10
"$1,000 to $10,000" → min: 1000, max: 10000
Special Cases:
"787041234" → "78704-1234" (9 digits treated as ZIP+4)
"-10" → min: -10, max: -10
"-10+" → min: -10, max: null
" 1 to 10 " → min: 1, max: 10 (whitespace trimmed)
Date/Time Ranges:
"2015-07-01 - 2015-07-25" → date range
"2015-07-01T01:59:32.022Z - 2015-07-25T01:59:32:021Z" → time range
Invalid inputs (valid=false): "asdf", non-numeric strings
Field Examples: Age, Income Range, Years at Residence
US Social Security Number parsing with masking for privacy.
Components:
Maskable: Yes
Operators:
is equal to / is not equal tois blank / is not blankformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
During processing:
"123456789" → first_three: "123", middle_two: "45", last_four: "6789"
"123-45-6789" → "123456789" (dashes removed)
"123 45 6789" → "123456789" (spaces removed)
"123.45.6789" → "123456789" (dots removed)
" 123-45-6789 " → "123456789" (trimmed)
"donkey 123456789" → "123456789" (text ignored)
After processing (stored as): "*********"
No components accessible - all values masked
Invalid inputs (valid=false): "abcd", "", " "
Field Examples: Social Security Number
Common Component Usage (During Processing Only):
Social Security Number > Last Four equals "1234"{{Social Security Number > Last Four}}Social Security Number > Valid is trueNote: After processing completes, these components are NOT available
US states and Canadian provinces with abbreviation normalization.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneincludes / does not includeis included in / is not included inExamples:
US States:
"TX" → name: "Texas"
"tx" → "TX" (auto-uppercased)
"Texas" → "TX"
"texas" → "TX"
Canadian Provinces:
"ON" → name: "Ontario"
"Quebec" → "QC", name: "Quebec"
Unknown Values (still valid=true):
"DX" → "DX" (unknown but preserved)
"Dexus" → "Dexus"
"DEXUS NEXUS" → "DEXUS NEXUS"
Field Examples: State, Property State, License State
Street address parsing with number and name extraction.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples:
"123 Main Street" → number: "123", name: "Main Street"
"4203 Guadalupe St" → number: "4203", name: "Guadalupe St"
" 123 Main St " → "123 Main St" (trimmed)
Invalid inputs (valid=false): "Main Street" (no number), "Asdf"
Field Examples: Address 1, Property Address
Universal text type with no format requirements.
Components: None
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneincludes / does not includeis included in / is not included inmatches pattern / does not match patternExamples: Any text value
Field Examples: Comments, Description, Custom Field 1
Natural language datetime parsing with flexible format support.
Components:
Operators:
is equal to / is not equal tois less than / is less than or equal tois greater than / is greater than or equal tois blank / is not blankformat is valid / format is invalidis between / is not betweenExamples:
Natural Language:
"June 14, 2015 6:27 PM" → "2015-06-14T18:27:00.000Z"
"Sat Jun 14 2014 13:27:33 GMT-0500 (CDT)" → ISO datetime
"yesterday at 3pm" → (calculated datetime)
ISO Formats:
"2015-06-14T18:27:33Z" → "2015-06-14T18:27:33.000Z"
"2015-06-14T18:27:33.123Z" → with milliseconds
"2015-06-14T18:27:33.12345Z" → with microseconds
Other Formats:
"06/14/2014 6:27:33 PM" → ISO datetime
JavaScript Date objects → ISO datetime
Invalid inputs (valid=false): "garbage", {foo: 42}
Field Examples: Submission Time, Appointment Time
Specialized type for TrustedForm certificate URLs with validation.
Components:
Special Validation:
Operators:
is blank / is not blankformat is valid / format is invalidExamples:
Web Certificates:
"https://cert.trustedform.com/eb9fc4dd9bed9ad451a5648946cf4bf09b5bb947"
→ type: "web", is_web: true
Facebook Certificates:
"https://cert.trustedform.com/0.GUr7[...very long...]" (with dots)
→ type: "facebook", is_facebook: true
Mobile Certificates:
"https://cert.trustedform.com/[64-character-id]"
→ type: "mobile", is_mobile: true
Staging/Dev URLs:
Allowed in non-production environments
Invalid inputs (valid=false):
Field Examples: TrustedForm Certificate URL
General URL parsing with component extraction.
Components:
Operators:
is equal to / is not equal tois blank / is not blankis obscene / is not obsceneformat is valid / format is invalidincludes / does not includeis included in / is not included inExamples:
Full URLs:
"https://google.com/search?q=hi#results"
→ protocol: "https", host: "google.com", path: "/search", query: "q=hi", hash: "results"
Partial URLs:
"centennialbulb.org" → host: "centennialbulb.org" (no protocol)
"172.0.0.1" → valid IP as URL
"http" → protocol only
"whatever" → treated as domain
Invalid inputs (valid=false): "", " ", "https://", "donkey://google.com"
Field Examples: Landing Page URL, Referrer URL
Types automatically normalize data - you don't need to:
The type system handles ALL normalization - just pass the raw data!
Types accept chaotic input and produce consistent output:
Phone Number Standardization:
"(512) 789-1111" → "5127891111"
"512-789-1111" → "5127891111"
"512.789.1111" → "5127891111"
"5127891111" → "5127891111"
"+1 512 789 1111" → "5127891111"
All produce the same normalized format with identical components.
Date Standardization:
"6/2/2014" → "2014-06-02"
"June 2, 2014" → "2014-06-02"
"2014-06-02" → "2014-06-02"
"06-02-2014" → "2014-06-02"
"20140602" → "2014-06-02"
All produce ISO format dates.
When types encounter invalid data:
valid is set to false: Marking the data quality issueraw preserves input: Original data is never lostExample:
// Invalid phone number
Input: "not a phone"
Result: {
normal: "notaphone", // Non-digits removed
raw: "not a phone", // Original preserved
valid: false, // Marked as invalid
// No components extracted
}
// Lead continues processing!
Always prefer components over string manipulation:
✅ Good - Using Components:
// Check area code
Phone 1 > Area equals "512"
// Check email domain
Email > Domain equals "gmail.com"
// Check ZIP code
Postal Code > ZIP equals "78701"
❌ Bad - String Manipulation:
// Don't do this!
substring(Phone 1, 0, 3) equals "512"
split(Email, "@")[1] equals "gmail.com"
substring(Postal Code, 0, 5) equals "78701"
Components are:
Some types contain sensitive data that are automatically masked for security:
How Masking Works:
* characters onlyExample of SSN Masking:
During processing: "123-45-6789" → Available for rules and integrations
In database/UI/API: "*********" → Only masked version stored
Components: NOT preserved - no SSN data accessible after processing
Example of DOB Masking:
During processing: "1990-01-15" → Age: 34.9, Year: 1990 available
In database/UI/API: "****-**-**" → Only masked version stored
Components: NOT preserved - no DOB data accessible after processing
Example of Credential Masking:
During processing: "mypassword123" → Available for integrations
In database/UI/API: "*************" → Only masked version stored
This ensures sensitive data can be used for processing (validation, delivery to buyers) while maintaining security and compliance by never storing the actual values or any components.
TrustedForm URL:
Email:
Phone:
Some types never return valid: false:
These types accept any string input because there's no universal format to validate against.
String: Default for text without specific format requirements
Number: Numeric data for calculations or comparisons
Boolean: Yes/no decisions
Email: Contact emails requiring validation
Phone: Phone numbers needing standardization
Date/Time: Temporal data
DOB: Special handling for birth dates
Postal Code: Location-based decisions
SSN: Highly sensitive identification
Types gracefully handle various input formats:
Boolean: "yes", "y", "1", "true" → true
State: "TX", "Texas", "tx", "texas" → "TX"
Phone: Multiple formats → Single standard
Types extract as much value as possible:
Valid email → All components extracted
Invalid email → Still preserves raw, domain might be partial
Valid phone → All components available
Invalid phone → Raw preserved, some components may exist
Types enable sophisticated rules without complexity:
IF Email > Is Free is true THEN apply different pricing
IF Phone 1 > Is Tollfree is true THEN flag for review
IF DOB > Age is less than 18 THEN require guardian consent
IF Postal Code > Country Code equals "US" THEN use US validation
In flow configuration:
Types integrate with the rules engine:
valid property in conditions