Overview
Dwarf Forms allows you to ship a shorter web form that would deliver a rich profile about your customer.
Minimum requirements
To use Dwarf Forms, you will need
- A website with a traditional web form. That means a form encapsulated
<form>..</form>
HTML tags. - the ability to tweak the HTML form
- the ability to make API requests in the backend on form submission
- A Proxycurl account (Don't have one yet? Register an account for free at this link)
- HTML form requires an email field.
Form submission flow
From the user's perspective
- User fills up the form as per normal
- User submits the form
- An
<iframe>
popup by Dwarf Forms will appear asking the user to choose which profile is him/her - Form submits after profile selection
From the developer's perspective
- Form submission is received
- Extract
whodis-token
from the submitted data - Enrich the user profile by trading
whodis-token
against Form Enrichment endpoint
Demo
You can view a user-perspective demo of Dwarf Forms at this link.
The demo walks you through a form filling process that is shortened with Dwarf Forms. Upon form submission, you can inspect the form data enriched with the customer's profile.
Getting started
Setting up your HTML form
<!DOCTYPE html>
<html lang="en">
<body>
<form>
<input
type="hidden"
data-whodis-pubkey="{{PUBLIC_KEY}}"
name="whodis-token"
/>
<label for="work-email">Work Email</label>
<input type="email" id="work-email" name="work-email" />
<button type="submit">Submit</button>
</form>
<script
async
src="https://nubela.co/proxycurl/media/whodis/embed.js"
></script>
</body>
</html>
Log into Proxycurl and head over to Dwarf Form's dashboard page
Take note of the Public Key Token found in the dashboard page.
Initialize the Dwarf Form script by adding the following tag just before you end your
</body>
.<script async src="https://nubela.co/proxycurl/media/whodis/embed.js"></script>
Replace {{PUBLIC_KEY}} with your Public Key Token and add the following
<input>
field to authenticate Dwarf Forms:<input type="hidden" data-whodis-pubkey="{{PUBLIC_KEY}}" name="whodis-token">
<script async src="https://nubela.co/proxycurl/media/whodis/embed.js"></script>
Enriching form after submission
import requests
WHODIS_TOKEN = "SOME_TOKEN_FETCHED_FROM_FORM_DATA"
r = requests.get("https://nubela.co/proxycurl/api/whodis", params={
"token": WHODIS_TOKEN,
})
profile_data = r.json()
Upon form submission, extract
whodis-token
from the form dataMake a request to Form Enrichment endpoint with the token within 12 hours to fetch the submitter's profile data. (See sample Python code below)
Pricing
Dwarf Forms is a freemium product.
Depending on which plan you are on, you are given N
form enrichments every month.
A form enrichment is considered to have happened when Dwarf Forms the profile selection dialog appears for the user. Therefore, every time a profile selection dialog opens for your customer, your form enrichment quota will decrease by one.
Dwarf Forms Markup
The more information you provide to Dwarf Forms, the better the profile suggestions will be. To provice more information to Dwarf Forms, you have to tell Dwarf Forms which input fields to use. These are the data fields we support:
first_name
(First name of profile)last_name
(Last name of profile)email
(Work email address of profile)company
(Company of active employment of profile)
Marking an input as email
field
For Dwarf Forms to work, it requires an email field. By default, Dwarf Forms will use the first input field with an email type if no other input fields are marked as an email field.
Add data-whodis-search-field-email
to any <input>
to explicitly mark this field as a Dwarf Forms email
field.
Do note that Dwarf Forms work best with work emails
For example:
<input type=email data-whodis-search-field=email placeholder="[email protected]">
Marking an input as first_name
field
Add data-whodis-search-field=first_name
to any <input>
to explicitly mark this field as a Dwarf Form first_name
field.
For example:
<input type=text data-whodis-search-field=first_name placeholder="Steven">
Marking an input as last_name
field
Add data-whodis-search-field=last_name
to any <input>
to explicitly mark this field as a Dwarf Form last_name
field.
For example:
<input type=text data-whodis-search-field=last_name placeholder="Goh">
Marking an input as company
field
Add data-whodis-search-field=company
to any <input>
to explicitly mark this field as a Dwarf Form company
field.
For example:
<input type=text data-whodis-search-field=company placeholder="Nubela">
Dwarf Form API
Form Enrichment Endpoint
GET /proxycurl/api/whodis
Enrich a Dwarf Form submission. The use of Dwarf Form API is free.
URL Parameters
Parameter | Required | Description | Example |
---|---|---|---|
token |
yes | The token can be found in the submitted form data in the key titled whodis-token . |
"OnxyIfkXFb" |
Response
{
"accomplishment_courses": [
{
"name": "Sample course name",
"number": "Sample course number"
},
{
"name": "Incomplete Course",
"number": "-"
}
],
"accomplishment_honors_awards": [
{
"description": "This is the desc for my honors",
"issued_on": {
"day": 1,
"month": 2,
"year": 2017
},
"issuer": "Sample Issuer",
"title": "Sample honors"
},
{
"description": null,
"issued_on": null,
"issuer": "-",
"title": "Incomplete Awards"
}
],
"accomplishment_organisations": [
{
"description": null,
"ends_at": null,
"org_name": "Sample organization 2",
"starts_at": {
"day": 1,
"month": 1,
"year": 2018
},
"title": "-"
},
{
"description": "This is my dec for sample orgz",
"ends_at": {
"day": 29,
"month": 2,
"year": 2020
},
"org_name": "Sample organization",
"starts_at": {
"day": 1,
"month": 1,
"year": 2018
},
"title": "Sample position held"
},
{
"description": null,
"ends_at": null,
"org_name": "Incomplete Organization",
"starts_at": null,
"title": "-"
}
],
"accomplishment_patents": [
{
"application_number": "sample-patent-number",
"description": "This is the desc",
"issued_on": {
"day": 8,
"month": 1,
"year": 2018
},
"issuer": "Indonesia",
"patent_number": "sample-patent-number",
"title": "Sample patent title",
"url": "https://nubela.co/blog"
},
{
"application_number": null,
"description": null,
"issued_on": null,
"issuer": null,
"patent_number": null,
"title": "Incomplete Patent",
"url": null
}
],
"accomplishment_projects": [
{
"description": "This is the desc",
"ends_at": {
"day": 31,
"month": 1,
"year": 2020
},
"starts_at": {
"day": 1,
"month": 3,
"year": 2017
},
"title": "Sample project",
"url": "https://www.google.co.id/"
},
{
"description": null,
"ends_at": null,
"starts_at": null,
"title": "Incomplete Project",
"url": null
}
],
"accomplishment_publications": [
{
"description": "This is the description",
"name": "Sample publication",
"published_on": {
"day": 3,
"month": 1,
"year": 2018
},
"publisher": "Sample publisher",
"url": "https://www.google.co.id/"
},
{
"description": null,
"name": "Incomplete Publication",
"published_on": null,
"publisher": null,
"url": null
}
],
"accomplishment_test_scores": [
{
"date_on": {
"day": 1,
"month": 1,
"year": 2017
},
"description": "This is my desc for test score",
"name": "Sample test",
"score": "Sample score"
},
{
"date_on": null,
"description": null,
"name": "Incomplete Test Score",
"score": "A"
}
],
"activities": [
{
"activity_status": "Posted by Joho Balboa",
"link": "https://www.linkedin.com/signup/cold-join",
"title": "Golang is very useful for writing light-weight microservices. We currently use it for generating APIs that interact with our front-end applications\u2026"
},
{
"activity_status": "Posted by Joho Balboa",
"link": "https://www.linkedin.com/signup/cold-join",
"title": "New Activity bro"
}
],
"articles": [
{
"author": "By Joho Balboa",
"image_url": "https://media-exp1.licdn.com/dms/image/C4E12AQGLeKknc6P2cQ/article-cover_image-shrink_180_320/0/1636704383382?e=1642636800\u0026v=beta\u0026t=AJdzk7EZqrLVpuFOK_WqdTJvQ6c6Nxt7ckl3bf2yRIw",
"link": "https://www.linkedin.com/pulse/why-use-flutter-joho-balboa",
"published_date": {
"day": 12,
"month": 1,
"year": 2021
},
"title": "Why Use Flutter?"
}
],
"background_cover_image_url": "http://localhost:4566/proxycurl-web-dev/person/joho-balboa/cover?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=%2F20211115%2F%2Fs3%2Faws4_request\u0026X-Amz-Date=20211115T020440Z\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=08c5ba3a882c172bf9ff21ced7fbf5fe92397a7d24e6acbc025027d17508b876",
"certifications": [
{
"authority": "Cisco",
"display_source": "www.google.co.id",
"ends_at": null,
"license_number": "ID",
"name": "Cisco Certified Network Professional (CCNP)",
"starts_at": {
"day": 1,
"month": 1,
"year": 2020
},
"url": "https://www.google.co.id/"
},
{
"authority": "Cisco",
"display_source": "www.google.co.id",
"ends_at": {
"day": 28,
"month": 2,
"year": 2025
},
"license_number": "5644354",
"name": "Cisco Certified Network Professional (CCNP)",
"starts_at": {
"day": 1,
"month": 3,
"year": 2020
},
"url": "https://www.google.co.id/"
}
],
"city": "Manchester",
"connections": 2,
"country": "UK",
"country_full_name": "United Kingdom",
"education": [
{
"degree_name": null,
"description": null,
"ends_at": null,
"field_of_study": null,
"logo_url": null,
"school": "New sch",
"starts_at": null
},
{
"degree_name": "Bachelor\u0027s degree",
"description": "This is my description",
"ends_at": {
"day": 31,
"month": 12,
"year": 2014
},
"field_of_study": "International Business",
"logo_url": "https://media-exp1.licdn.com/dms/image/C560BAQFBK74krMig1Q/company-logo_100_100/0/1519855919160?e=1645056000\u0026v=beta\u0026t=_E1W2l1TkcyY4CAxvpkqkC0pW7fK9WMTqRZXs7InEwI",
"school": "Boston University",
"starts_at": {
"day": 1,
"month": 1,
"year": 2010
}
}
],
"experiences": [
{
"company": "My Own Company",
"company_linkedin_profile_url": null,
"description": "This is my description for My Own Company",
"ends_at": null,
"location": null,
"logo_url": null,
"starts_at": {
"day": 1,
"month": 1,
"year": 2020
},
"title": "Developer"
},
{
"company": "Microsoft",
"company_linkedin_profile_url": "https://uk.linkedin.com/company/microsoft",
"description": "This is my job description for Microsoft in Manchester England",
"ends_at": {
"day": 31,
"month": 1,
"year": 2020
},
"location": "Manchester, England, United Kingdom",
"logo_url": "https://media-exp1.licdn.com/dms/image/C560BAQE88xCsONDULQ/company-logo_100_100/0/1618231291419?e=1645056000\u0026v=beta\u0026t=clB4bpUSQPS79S2ZAny_lQ8Y6uocdiWGFW9N1ZJomTg",
"starts_at": {
"day": 1,
"month": 1,
"year": 2015
},
"title": "Software Engineer"
}
],
"first_name": "Joho",
"full_name": "Joho Balboa",
"groups": [
{
"name": "Test Group Name",
"profile_pic_url": "https://media-exp1.licdn.com/dms/image/C5607AQF62kMaGFQmkQ/group-logo_image-shrink_92x92/0/1635412830265?e=1637031600\u0026v=beta\u0026t=_8VM1P8EfSGwOU9-ubaQKeT8y6u087sU2EuJVuOtBh8",
"url": "https://www.linkedin.com/groups/14008882"
}
],
"headline": "Developer at My Own Company",
"languages": [
"Indonesian",
"English"
],
"last_name": "Balboa",
"occupation": "Developer at My Own Company",
"people_also_viewed": [
{
"link": "https://www.linkedin.com/in/sergiogilluque",
"location": "New York City Metropolitan Area",
"name": "Sergio Gil Luque",
"summary": "Senior Software Engineer at Bloomberg LP"
},
{
"link": "https://in.linkedin.com/in/mo-rustam-9b2754149",
"location": "Bhiwandi",
"name": "Mo Rustam",
"summary": "Android Engineer at Proven Solution"
},
{
"link": "https://fr.linkedin.com/in/morgane-jouanjan-802413197",
"location": "Greater Paris Metropolitan Region",
"name": "Morgane JOUANJAN",
"summary": "Cheffe de produit"
},
{
"link": "https://rs.linkedin.com/in/zoran-peko-10382713a",
"location": "Serbia",
"name": "Zoran Peko",
"summary": "Business owner"
},
{
"link": "https://fr.linkedin.com/in/david-de-la-ronde-8a919530",
"location": "Paris",
"name": "David De La Ronde",
"summary": "Information Technology Recruiter at Compaq Computer Corporation"
}
],
"profile_pic_url": "http://localhost:4566/proxycurl-web-dev/person/joho-balboa/profile?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=%2F20211115%2F%2Fs3%2Faws4_request\u0026X-Amz-Date=20211115T020440Z\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=a9c0953d114fe341fe6f50e64892af53033fe25b5e4afa1d1e69915d716dbde7",
"public_identifier": "joho-balboa",
"recommendations": [],
"similarly_named_profiles": [],
"state": "England",
"summary": "This is my LinkedIn summary profile",
"volunteer_work": [
{
"cause": "Children",
"company": "American Red Cross",
"company_linkedin_profile_url": "https://uk.linkedin.com/company/american-red-cross",
"description": "This is the description",
"ends_at": {
"day": 31,
"month": 8,
"year": 2019
},
"logo_url": "https://media-exp1.licdn.com/dms/image/C560BAQFsU7FEs1NDLA/company-logo_100_100/0/1521250747760?e=1645056000\u0026v=beta\u0026t=A5Hn9R3y4wDtlfdpk8eSObPwcGg4jko_5iUwDnTEnkY",
"starts_at": {
"day": 1,
"month": 3,
"year": 2018
},
"title": "Mentor"
}
]
}
Key | Description | Example |
---|---|---|
public_identifier | "joho-balboa" |
|
profile_pic_url | "http://localhost:4566/proxycurl-web-dev/person/joho-balboa/profile?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=%2F20211115%2F%2Fs3%2Faws4_request\u0026X-Amz-Date=20211115T020440Z\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=a9c0953d114fe341fe6f50e64892af53033fe25b5e4afa1d1e69915d716dbde7" |
|
background_cover_image_url | "http://localhost:4566/proxycurl-web-dev/person/joho-balboa/cover?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=%2F20211115%2F%2Fs3%2Faws4_request\u0026X-Amz-Date=20211115T020440Z\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Signature=08c5ba3a882c172bf9ff21ced7fbf5fe92397a7d24e6acbc025027d17508b876" |
|
first_name | "Joho" |
|
last_name | "Balboa" |
|
full_name | "Joho Balboa" |
|
occupation | "Developer at My Own Company" |
|
headline | "Developer at My Own Company" |
|
summary | "This is my LinkedIn summary profile" |
|
country | "UK" |
|
country_full_name | "United Kingdom" |
|
city | "Manchester" |
|
state | "Singapore" |
|
experiences | List of Experience | See Experience object |
education | List of Education | See Education object |
languages | ["Indonesian", "English"] |
|
accomplishment_organisations | List of AccomplishmentOrg | See AccomplishmentOrg object |
accomplishment_publications | List of Publication | See Publication object |
accomplishment_honors_awards | List of HonourAward | See HonourAward object |
accomplishment_patents | List of Patent | See Patent object |
accomplishment_courses | List of Course | See Course object |
accomplishment_projects | List of Project | See Project object |
accomplishment_test_scores | List of TestScore | See TestScore object |
volunteer_work | List of VolunteeringExperience | See VolunteeringExperience object |
certifications | List of Certification | See Certification object |
connections | 2 |
|
people_also_viewed | List of PeopleAlsoViewed | See PeopleAlsoViewed object |
recommendations | ["Professional and dedicated approach towards clients and collegues."] |
|
activities | List of Activity | See Activity object |
similarly_named_profiles | List of SimilarProfile | See SimilarProfile object |
articles | List of Article | See Article object |
groups | List of PersonGroup | See PersonGroup object |
Experience
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
company | The company's display name. | "My Own Company" |
company_linkedin_profile_url | The company's profile URL. |
null |
title | "Developer" |
|
description | "This is my description for My Own Company" |
|
location | null |
|
logo_url | URL of the logo of the organisation. | null |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 1 |
|
year | 2020 |
Education
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
field_of_study | null |
|
degree_name | null |
|
school | "New sch" |
|
description | null |
|
logo_url | null |
AccomplishmentOrg
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
org_name | "Sample organization 2" |
|
title | "-" |
|
description | null |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 1 |
|
year | 2018 |
Publication
Key | Description | Example |
---|---|---|
name | "Sample publication" |
|
publisher | "Sample publisher" |
|
published_on | A Date object | See Date object |
description | "This is the description" |
|
url | "https://www.google.co.id/" |
Date
Key | Description | Example |
---|---|---|
day | 3 |
|
month | 1 |
|
year | 2018 |
HonourAward
Key | Description | Example |
---|---|---|
title | "Sample honors" |
|
issuer | "Sample Issuer" |
|
issued_on | A Date object | See Date object |
description | "This is the desc for my honors" |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 2 |
|
year | 2017 |
Patent
Key | Description | Example |
---|---|---|
title | "Sample patent title" |
|
issuer | "Indonesia" |
|
issued_on | A Date object | See Date object |
description | "This is the desc" |
|
application_number | "sample-patent-number" |
|
patent_number | "sample-patent-number" |
|
url | "https://nubela.co/blog" |
Date
Key | Description | Example |
---|---|---|
day | 8 |
|
month | 1 |
|
year | 2018 |
Course
Key | Description | Example |
---|---|---|
name | "Sample course name" |
|
number | "Sample course number" |
Project
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
title | "Sample project" |
|
description | "This is the desc" |
|
url | "https://www.google.co.id/" |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 3 |
|
year | 2017 |
TestScore
Key | Description | Example |
---|---|---|
description | "This is my desc for test score" |
|
score | "Sample score" |
|
name | "Sample test" |
|
date_on | A Date object | See Date object |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 1 |
|
year | 2017 |
VolunteeringExperience
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
cause | "Children" |
|
company | The company's display name. | "American Red Cross" |
company_linkedin_profile_url | The company's profile URL. If present, could be used with Company Profile Endpoint for more info. |
"https://uk.linkedin.com/company/american-red-cross" |
title | "Mentor" |
|
description | "This is the description" |
|
logo_url | URL of the logo of the organisation. | "https://media-exp1.licdn.com/dms/image/C560BAQFsU7FEs1NDLA/company-logo_100_100/0/1521250747760?e=1645056000\u0026v=beta\u0026t=A5Hn9R3y4wDtlfdpk8eSObPwcGg4jko_5iUwDnTEnkY" |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 3 |
|
year | 2018 |
Certification
Key | Description | Example |
---|---|---|
starts_at | A Date object | See Date object |
ends_at | A Date object | See Date object |
url | "https://www.google.co.id/" |
|
name | "Cisco Certified Network Professional (CCNP)" |
|
license_number | "ID" |
|
display_source | "www.google.co.id" |
|
authority | "Cisco" |
Date
Key | Description | Example |
---|---|---|
day | 1 |
|
month | 1 |
|
year | 2020 |
PeopleAlsoViewed
Key | Description | Example |
---|---|---|
link | URL of the profile. Useable with Person profile endpoint |
"https://www.linkedin.com/in/sergiogilluque" |
name | "Sergio Gil Luque" |
|
summary | "Senior Software Engineer at Bloomberg LP" |
|
location | "New York City Metropolitan Area" |
Activity
Key | Description | Example |
---|---|---|
title | "Golang is very useful for writing light-weight microservices. We currently use it for generating APIs that interact with our front-end applications\u2026" |
|
link | "https://www.linkedin.com/signup/cold-join" |
|
activity_status | "Posted by Joho Balboa" |
Article
Key | Description | Example |
---|---|---|
title | "Manufacturing opportunity" |
|
link | "https://www.linkedin.com/pulse/manufacturing-opportunity-bill-gates/" |
|
published_date | A Date object | See Date object |
author | "Bill Gates" |
|
image_url | "https://media-exp1.licdn.com/dms/image/C4E12AQFftuPi0UiqWA/article-cover_image-shrink_720_1280/0/1574801149114?e=1640822400\u0026v=beta\u0026t=ZAe3ERmQCM8QHGmRPS2LJ-C76GD5PR7FBHMVL4Z6iVg" |
Date
Key | Description | Example |
---|---|---|
day | 27 |
|
month | 11 |
|
year | 2019 |
PersonGroup
Key | Description | Example |
---|---|---|
profile_pic_url | The URL to the profile picture of this LinkedIn Group | "https://media-exp1.licdn.com/dms/image/C5607AQF62kMaGFQmkQ/group-logo_image-shrink_92x92/0/1635412830265?e=1637031600\u0026v=beta\u0026t=_8VM1P8EfSGwOU9-ubaQKeT8y6u087sU2EuJVuOtBh8" |
name | Name of LinkedIn group for which this user is in | "Test Group Name" |
url | URL to the LinkedIn Group | "https://www.linkedin.com/groups/14008882" |
Sample use-cases
Registration forms
You can shorten your registration forms to a single email
field and get your customer's entire LinkedIn profile in your database.
Sales inquiry forms
Streamline your sales inquiry forms.
You no longer have to ask your customers which company they represent, what role they play or their company size. Instead, this information is now provided to you with Dwarf Forms when your customer completes a simple inquiry form with his question and work email.