← Guides

How-to

How to run New Jersey Contractor License Lookup & List Scraper (DCA)

Step-by-step: the exact input, what each field does, and the rows that come back from the New Jersey Division of Consumer Affairs licence search.

You want New Jersey contractor licences from the Division of Consumer Affairs (DCA): either a handful of licence numbers to check, or a list of the home improvement contractors, electrical contractors, master plumbers or HVACR contractors in a city. DCA’s verification site is free and answers one search at a time, 40 licences to a page, with no download. New Jersey had 64,569 active licences across those four trades on 2026-10-12, 47,251 of them home improvement registrations, and the street address you probably want sits one click deeper on each licence’s own page. This actor runs the same search and hands back the rows as a table.

What you’ll need

Nothing but an Apify account. The actor talks to DCA’s verification site directly.

No API key and no proxy: DCA answered Apify’s own container IP fastest in our recon, so the proxy is off by default. DCA does have one limit worth knowing about. After 20 detail pages viewed from a single search it redirects to a CAPTCHA page, so the actor never solves anything; it runs a fresh search for every group of about 10 licences and opens at most 20 details per search.

Step 1: Open the actor

Open New Jersey Contractor License Lookup & List Scraper (DCA) on the Apify Store and press Try for free. The actor’s own page on this site lists its live health and pricing.

The New Jersey Contractor License Lookup & List Scraper (DCA) listing on the Apify Store
The listing on the Apify Store. Pricing and the nightly health record are both public.

Step 2: Fill in the input

The input form for New Jersey Contractor License Lookup & List Scraper (DCA) in the Apify Console
The input form, as it appears in the Apify Console.
FieldTypeRequiredWhat it does
querystringnoA full DCA licence number (‘13VH13621300’), a business name or part of one (‘Vista Fencing’ — matched anywhere in the name), or a person’s name written FIRST then LAST for…
queriesarraynoSeveral lookups in ONE run, one per line. Combined with the field above if you fill both. (default [])
tradestringnohome_improvement (Home Improvement Contractor registrations, 13VH), electrical (Electrical Business Permits, 34EB), plumbing (Master Plumber licences, 36BI) or hvacr (Master…
tradesarraynoSeveral trades in ONE export, e.g. electrical and plumbing. (default [])
statusstringnoActive by default. DCA also lists Expired, Closed, Suspended, Revoked and others; type ‘all’ to export every status.
statusesarraynoSeveral statuses in ONE export, e.g. Active and Expired. (default [])
citystringnoAddress city, exact match ignoring case and punctuation, e.g. ‘Newark’. DCA lists the licensee’s own address, not where they work.
citiesarraynoSeveral cities in ONE export. (default [])
newJerseyAddressesOnlybooleannoOut-of-state firms register too. Tick to drop licensees whose address is outside New Jersey.
includeDetailsbooleannoFetch each licence’s DCA detail page: street address, ZIP, owner name and DBA (home improvement and electrical businesses) and issue/expiry dates (all trades). Adds time, not… (default True)
maxResultsintegernoEXPORT: cap on licences for the WHOLE run — your spend control (set 100000 to take everything that matches). LOOKUP: cap per name or number (default 50).

The field that decides the mode is query. Fill it (or queries) and the run is a lookup: a full licence number returns that licence whatever its status, and a name returns every licence filed under it. Leave it empty and the run is an export, filtered by trade, status and city. With no filter at all it exports active licences in all four trades, up to maxResults, which defaults to 500.

The second is city, because it catches people out twice. It matches the licensee’s own address, so it finds firms based in a town rather than firms that work there. And it matches the city name, not the state: on 2026-10-12 a Newark export returned 813 active home improvement registrations, 20 of them in Newark, Delaware. Tick newJerseyAddressesOnly to drop those.

A working input:

{
  "trade": "home_improvement",
  "city": "Newark",
  "maxResults": 1000
}

Step 3: Run it

Press Start. The run log says how many licences DCA listed, then how many detail pages it opened.

That input took 323 seconds on Apify on 2026-10-12. The log read “Listing: 813 licence(s) from 1 of 1 search(es) in 249s” and then “Details: 813 of 813 licences enriched (772 group searches) in 69s”. The listing is the slow half because DCA re-runs a city search for every page of 40. A lookup is quick: two licence numbers and the name “John Smith” returned 7 licences in 14.4 seconds on a local run the same day.

A statewide export is a different size of job. The licence lists alone are about 3,600 result pages, and our recon swept the 140 home improvement shards in about 6 minutes. Opening a detail page for every one of 64,569 licences does not fit in one run: the actor gives the detail pass a fixed time budget, 8 detail sessions enriched 40,765 of 64,569 rows in it (2026-10-12; home improvement now goes first), and rows it could not reach come back without the detail fields. For a statewide list, untick includeDetails, or export a trade at a time.

One more setting matters for exports: the run’s maximum charge. Apify stops billing when it is reached and the actor stops delivering, so a 1,000-row export needs a maximum charge of at least $4.00.

Step 4: Read the output

Each run returns a labelled table, not raw JSON:

The output fields returned by New Jersey Contractor License Lookup & List Scraper (DCA)
The output view: every field the actor returns, named and typed.

Every row looks like this, a real row from a lookup run:

{
  "license_number": "13VH13621300",
  "business_name": "VISTA FENCING LLC",
  "dba_name": null,
  "person_name": "Olsen Tafa",
  "trade": "home_improvement",
  "profession": "Home Improvement Contractors",
  "license_type": "Home Improvement Business Contr",
  "status": "Active",
  "status_change_reason": "License Issuance",
  "address": "154 Charles St Rear",
  "city": "Garfield",
  "address_state": "NJ",
  "zip_code": "07026",
  "issue_date": "2025-04-25",
  "expiration_date": "2027-03-31",
  "matched_by": "license_number",
  "state": "NJ",
  "source_url": "https://newjersey.mylicense.com/verification/Search.aspx?facility=Y"
}
FieldExample valueMeaning
license_number13VH13621300DCA licence number, e.g. 13VH13621300
business_nameVISTA FENCING LLCBusiness name, or the licensee’s name for plumbers and HVACR
dba_name—Doing-business-as name, when filed
person_nameOlsen TafaOwner (home improvement) or qualifying electrician (electrical)
tradehome_improvementhome_improvement, electrical, plumbing or hvacr
license_typeHome Improvement Business Contre.g. Home Improvement Business Contr, Master Plumber
statusActiveActive, Expired, Closed, Suspended, Revoked…
status_change_reasonLicense IssuanceDCA’s reason for the latest status change

For home improvement contractors the reason to come is the street address. In the Newark export it was filled on all 813 rows and the owner on 809. The other three trades are thinner, because DCA shows no street, ZIP or owner for electrical permits, master plumbers or HVACR licences, only the city and state; an electrical permit does name its qualifying electrician in person_name. phone is always null, since DCA publishes no phone and no email. A licence number is not a unique key on its own: DCA re-issued some old electrical permit numbers, and a licence can be listed under two statuses at once, so key on the number, status and name together.

Step 5: Export it

Open the Dataset tab and export to CSV, JSON or Excel, or pull the same rows from the API, which is what you want if this is going to run on a schedule.

What it costs

$0.004 per licence returned, plus Apify’s own platform usage. The Newark export above is 813 rows, so $3.25. The default export with an empty input is 500 rows ($2.00), and every active licence in the four trades is 64,569 rows ($258.28), for which both maxResults and the run’s maximum charge have to be raised. A lookup of a few licence numbers costs a few cents. Rows explaining an outage, a cut-short run or an unrecognised filter are free.

Where the data comes from

This reads the New Jersey Division of Consumer Affairs’ public licence verification site, live on every run. DCA publishes no bulk file and New Jersey’s open-data portal has no licence dataset, so this search is the only door. Every night a canary runs this actor on Ridgewood’s home improvement contractors and checks that at least 30 come back, each with a street address, ZIP and expiry date: what “verified” means.

The New Jersey Division of Consumer Affairs business licence search
DCA's business search, captured 2026-10-12. Plumbers and HVACR contractors are on the separate Person Search.

If you need to check one or two contractors, the site is free and it is the right tool: pick the profession, type the number, open the licence. It stops being reasonable at list size. Results come 40 to a page, every address is a separate click, DCA’s detail links work only while their results page is current, and after 20 detail views from one search the site answers with a CAPTCHA page instead.

See it used

Export Newark, New Jersey Home Improvement Contractors builds a mailing list of the 793 active registrations with a Newark, New Jersey address. Verify New Jersey Contractor Licenses (DCA) checks a vendor list of licence numbers and names for anything not active.

When you need a phone number, which DCA does not publish, West Virginia Contractor License Lookup & Leads Scraper (WVCLB) and Arizona Contractor License Lookup & Leads Scraper (ROC) carry one on their licences, for contractors in those states.

Last updated 2026-10-12