Synthetic job example Enrich Mobile & Verify Employment¶
Preview
This feature is not subject to our service terms. Pre-GA features are available as is and might have limited support.
Deterministic configuration¶
Tip
Synthetic repositories allow for streamlined testing of various scenarios and ensure your application functions correctly in submitting requests and processing resulting data.
Please see Synthetic tests to learn more about synthetic repositories.
In the table below you will learn how you produce a desired job response so you can test a specific case in your application.
| Test case | Expected event code | Necessary input values |
|---|---|---|
| One mobile number gets appended | appendMobile="appended" |
First letter of first name between A and M |
| No mobile number gets appended | appendMobile="unable_to_append" |
First letter of first name between N and Z |
| Provided LinkedIn will be used | appendLinkedIn="from_input" |
You provide a LinkedIn user URL and the first letter of last name between A and M |
| Provided LinkedIn URL gets replaced by an appended LinkedIn URL | appendLinkedIn="replaced" |
You provide a LinkedIn user URL and the first letter of last name between N and Z |
| One LinkedIn URL gets appended | appendLinkedIn="appended" |
No LinkedIn URL provided and first letter of last name between A and M |
| No LinkedIn URL provided or appended | appendLinkedIn="unable_to_append" |
No LinkedIn URL provided and first letter of last name between N and Z |
| Prospect works at target company | verifyEmployment="verified" |
First letter of company name between A and I |
| Prospect left target company | verifyEmployment="changed" |
First letter of company name between J and R |
| Prospect found at another company | verifyEmployment="verified_elsewhere" |
Currently not supported in synthetic tests |
| Unable to verify the current employment | verifyEmployment="unable_to_verify" |
First letter of company name between S and Z |
| 1 email address gets appended | n/a | You provide a LinkedIn user URL that contains the word “email” anywhere in the path after /in/, e.g.https://www.linkedin.com/in/kelly-email-123 |
| 1 location gets appended | n/a | You provide a LinkedIn user URL that contains the word “location” anywhere in the path after /in/, e.g.https://www.linkedin.com/in/kelly-location |
| 1 country gets appended | n/a | You provide a LinkedIn user URL that contains the word “country” anywhere in the path after /in/, e.g.https://www.linkedin.com/in/kelly-country |
| 1 address gets appended | n/a | You provide a LinkedIn user URL that contains the word “address” anywhere in the path after /in/, e.g.https://www.linkedin.com/in/kelly-address |
Job request¶
Your application must publish the job request in the Pub/Sub topic for enrichMobile job requests, see Pub/Sub topics.
Message attributes¶
modigieJobRequestId = personA_enrichMobile_1-
The ID of the job request must be unique within your repository. If your repository creates the job, this request ID becomes the
idvalue of the job resource.
Message data¶
{
"payload": {
"person": { // (1)!
"firstName": "John",
"lastName": "Doe",
"source": {
"objectId": "personA",
"propertyName": "name"
}
},
"emailAddresses": [
{
"emailAddress": {
"userFormat": "jdoe@acme.com" // (2)!
},
"rels": ["business"], // (3)!
"source": { // (4)!
"objectId": "personA",
"propertyName": "companyEmail"
}
}
],
"employment": {
"company": {
"title": "Acme Inc.", // (5)!
"source": {
"objectId": "personA",
"propertyName": "company"
}
}
},
"tags": [ // (6)!
{
"name": "campaign",
"value": "2025-09-OUT"
},
{
"name": "billing",
"value": "00427"
}
]
}
}
- The person for which your application requests the job.
- The email address in arbitrary format as provided by your application. For every email address, Modigie will return validated syntax information.
- Your application can use
relsto specify the relationship of an attribute like this email address to the person. Email addresses, URLs, and phone numbers each have their own possiblerelsvalues. - Your application can provide a
sourcereference to the original source of an attribute like this email address. Modigie returns the reference as is. - The target company at which the person presumably works.
- The list of custom job tags that your application can attach to each job request for analytical or operational purposes. See Job tags.
Job response¶
Your application can get the job response from the Pub/Sub subscription for enrichMobile job responses, see Pub/Sub topics. Depending on the configuration of your repository this may be a pull subscription, a push subscription, or both.
Message attributes¶
modigieJobRequestId = personA_enrichMobile_1- This is the request ID that your application used when publishing the request message. If the repository creates the job, this request ID becomes the
idvalue of the job resource.
Message data¶
The highlighted lines in the job response below show the elements that Modigie has written.
URLs, email addresses, and phone numbers—whether provided by your application as input parameters or appended by Modigie—include validated syntax information. Depending on the job type, some attributes have additional intelligence data. For details, see Job types and Outputs.
{
"id": "personA_enrichMobile_1",
"name": "repositories/my-synth-1/jobs/personA_enrichMobile_1",
"repository": {
"id": "my-synth-1",
"name": "repositories/my-synth-1",
"repoType": "inpubsub",
"org": {
"id": "Q8IRqGvOcGG8lt4dWa3e",
"name": "orgs/Q8IRqGvOcGG8lt4dWa3e"
}
},
"jobType": "enrichMobile",
"createTime": "2025-04-18T19:25:30.290329Z",
"updateTime": "2025-04-18T19:25:40.290329Z",
"deleteTime": null,
"purgeTime": null,
"expireTime": null,
"startTime": "2025-04-18T19:25:32.290329Z",
"endTime": "2025-04-18T19:25:40.290329Z",
"priority": 50,
"status": "completed", // (1)!
"reason": null,
"events": { // (2)!
"appendLinkedIn": {
"code": "appended"
},
"verifyEmployment": {
"code": "verified"
},
"appendMobile": {
"code": "appended"
},
"verifyMobile": null
},
"payload": {
"person": {
"firstName": "John",
"middleNames": null,
"lastName": "Doe",
"source": { // (3)!
"objectSystem": null,
"objectType": null,
"objectId": "personA",
"propertyName": "name"
}
},
"emailAddresses": [ // (4)!
{
"source": {
"objectSystem": null,
"objectType": null,
"objectId": "personA",
"propertyName": "companyEmail"
},
"rels": [
"business"
],
"emailAddress": {
"userFormat": "jdoe@acme.com",
"normalFormat": "jdoe@acme.com",
"rfc882Format": "jdoe@acme.com",
"isDeliverable": true,
"isSyntaxValid": true
}
}
],
"employment": { // (5)!
"company": {
"title": "Acme Inc.",
"source": {
"objectSystem": null,
"objectType": null,
"objectId": "personA",
"propertyName": "company"
},
"verification": {
"title": "Acme Inc."
}
},
"employmentEnd": null,
"position": null,
},
"phoneNumbers": [ // (6)!
{
"callWindows": [],
"rating": {
"score": 89,
"scoreMax": 100,
"numberActivity": {
"code": "high",
"score": 89
},
"numberNameMatch": {
"code": "high",
"score": 89
}
},
"phoneType": "mobile",
"source": null,
"compliance": null,
"smsEmailAddresses": [],
"phoneNumber": {
"userFormat": "(202) 555-0100",
"isPossible": true,
"isValid": true,
"intlFormat": "+1 202-555-0100",
"natlFormat": "(202) 555-0100",
"presumedPhoneType": "mobile",
"country": {
"officialName": "United States of America",
"num3": "840",
"alpha3": "USA",
"title": "United States",
"alpha2": "US"
},
"e164Format": "+12025550100",
"ituCountryCode": 1
},
"rels": [
"business"
]
}
],
"urls": [ // (7)!
{
"rels": [
"linkedInUser"
],
"url": {
"userFormat": "https://www.linkedin.com/in/not-a-real-profile/",
"rfc3986Format": {
"port": null,
"hostname": "www.linkedin.com",
"netloc": "www.linkedin.com",
"path": "/in/not-a-real-profile/",
"username": null,
"scheme": "https",
"fragment": "",
"params": "",
"password": null,
"query": ""
},
"normalFormat": "https://www.linkedin.com/in/not-a-real-profile",
"isResolvable": true,
"includesAuthority": true,
"isSyntaxValid": true,
"isRemote": true
},
"source": null
}
],
"locations": [ // (8)!
{
"formattedAddress": "San Francisco Bay Area, United States"
}
],
"countries": [ // (9)!
{
"title": "United States",
"alpha2": "us",
"alpha3": "usa",
"num3": "840",
"officialName": "United States of America"
}
],
"addresses": [],
"tags": [ // (10)!
{
"name": "campaign",
"value": "2025-09-OUT"
},
{
"name": "billing",
"value": "00427"
}
]
}
}
- The current status of a job. Your application should only digest the results if the status is
"completed". See Life cycle of a job. - If the job status is
"completed", your application can consume the events which show the outcomeof each task of a job. See Event codes. - Your application can use the
sourcereference to map results back to the exact database field where it originated from which makes the digestion of results easier. See Event codes. - Email addresses can be both, provided by your application or appended by Modigie. Email addresses contain syntax validation and different formats. Depending on the job type they also may contain intelligence signals. See Rich email address.
- The
employmentobject contains properties provided by your application, and with the proper job type, Modigie will verify these properties and may add verified information. See Current employment - Phone numbers can be both, provided by your application or appended by Modigie. Phone numbers contain syntax validation and different formats. Depending on the job type they also may contain intelligence signals. See Rich phone number.
- URLs can be both, provided by your application or appended by Modigie. URLs contain syntax validation and different formats. Depending on the job type they also may contain intelligence signals. See Rich URL.
- Depending on the job type Modigie may also provide a list of all current locations discovered for the person in this job. See Locations.
- Depending on the job type Modigie may also provide a list of all countries discovered for the person in this job.. See Countries.
- The list of custom job tags that your application can attach to each job request for analytical or operational purposes. See Job tags.