NAV
python

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

Form submission flow

From the user's perspective

  1. User fills up the form as per normal
  2. User submits the form
  3. An <iframe> popup by Dwarf Forms will appear asking the user to choose which profile is him/her
  4. Form submits after profile selection

From the developer's perspective

  1. Form submission is received
  2. Extract whodis-token from the submitted data
  3. 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>
  1. Log into Proxycurl and head over to Dwarf Form's dashboard page

  2. Take note of the Public Key Token found in the dashboard page.

  3. 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>

  4. 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()
  1. Upon form submission, extract whodis-token from the form data

  2. Make 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:

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.