ConnectLI APIconnectli.com ↗
Access business contact data for Nassau & Suffolk County via the ConnectLI API. Retrieve phone numbers, addresses, coordinates, and websites by category.
What is the ConnectLI API?
The ConnectLI API provides structured access to Long Island business directory data across Nassau and Suffolk County through 2 endpoints. The list_businesses endpoint returns paginated business listings including name, phone, address, GPS coordinates, website, and description for any category. Use list_categories first to discover all available category IDs and their listing counts before querying businesses.
curl -X POST 'https://api.parse.bot/scraper/d9b117f0-b797-47a5-be3b-7bd2f0fe8dd4/list_businesses' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"category": "94"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace connectli-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
ConnectLI Business Directory API Client
Access contact information for businesses listed on ConnectLI.com,
a Long Island business directory covering Nassau & Suffolk County.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Dict, Any, List
class ParseClient:
"""Client for interacting with the ConnectLI Business Directory API."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided,
reads from PARSE_API_KEY environment variable.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "d9b117f0-b797-47a5-be3b-7bd2f0fe8dd4"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError(
"API key not provided. Set PARSE_API_KEY environment variable "
"or pass api_key parameter."
)
def _call(
self, endpoint: str, method: str = "POST", **params
) -> Dict[str, Any]:
"""
Make a request to the Parse API.
Args:
endpoint: API endpoint name
method: HTTP method (GET or POST)
**params: Query/body parameters
Returns:
Parsed JSON response
Raises:
requests.exceptions.RequestException: If the request fails
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json",
}
if method.upper() == "GET":
response = requests.get(url, headers=headers, params=params)
elif method.upper() == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
def list_businesses(
self,
category: str,
page: int = 1,
per_page: int = 50,
) -> Dict[str, Any]:
"""
List all businesses in a specified category with contact information.
Args:
category: Business category. Accepted values: architects, insurance,
law_firms, it_companies
page: Page number for pagination (default: 1)
per_page: Number of results per page (default: 50)
Returns:
Dictionary containing category, total_found, page, per_page,
max_pages, and listings array with business objects
"""
return self._call(
"list_businesses",
method="POST",
category=category,
page=page,
per_page=per_page,
)
def main():
"""
Practical workflow: Search for businesses in multiple categories
and display contact information for easy outreach.
"""
# Initialize client
client = ParseClient()
# Categories we want to search
categories = ["architects", "it_companies"]
all_businesses = []
print("=" * 70)
print("ConnectLI Business Directory Search")
print("=" * 70)
# Iterate through categories
for category in categories:
print(f"\n📂 Searching category: {category.replace('_', ' ').title()}")
print("-" * 70)
try:
# Get first page of results for this category
response = client.list_businesses(
category=category,
page=1,
per_page=50,
)
total_found = response.get("total_found", 0)
max_pages = response.get("max_pages", 1)
listings = response.get("listings", [])
print(f"Found {total_found} businesses across {max_pages} page(s)")
# Process listings from this page
for idx, business in enumerate(listings, 1):
business_info = {
"category": category,
"id": business.get("id"),
"name": business.get("name"),
"phone": business.get("phone"),
"address": business.get("address"),
"website": business.get("website"),
"description": business.get("description", "N/A")[:80] + "...",
}
all_businesses.append(business_info)
# Display first 3 businesses per category as preview
if idx <= 3:
print(f"\n Business #{idx}: {business.get('name')}")
print(f" 📞 Phone: {business.get('phone')}")
print(f" 📍 Address: {business.get('address')}")
print(f" 🌐 Website: {business.get('website', 'N/A')}")
if len(listings) > 3:
print(f"\n ... and {len(listings) - 3} more businesses")
# If there are multiple pages, fetch additional pages
if max_pages > 1:
print(f"\n 📄 Pagination available: {max_pages} total pages")
except requests.exceptions.RequestException as e:
print(f" ❌ Error fetching {category}: {e}")
# Summary statistics
print("\n" + "=" * 70)
print("SUMMARY")
print("=" * 70)
print(f"Total businesses found: {len(all_businesses)}")
if all_businesses:
print("\n📋 Contact Summary:")
print("-" * 70)
# Group by category
by_category = {}
for biz in all_businesses:
cat = biz["category"]
if cat not in by_category:
by_category[cat] = []
by_category[cat].append(biz)
for category, businesses in sorted(by_category.items()):
print(f"\n{category.replace('_', ' ').title()} ({len(businesses)})")
for biz in businesses[:2]: # Show first 2 per category
print(f" • {biz['name']:40} | {biz['phone']}")
if __name__ == "__main__":
main()List all businesses in a specified category with their contact information including name, phone, address, website, and description. Returns paginated results. The category parameter accepts named aliases (architects, insurance, law_firms, it_companies) or any numeric category ID from list_categories.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| categoryrequired | string | Business category to list. Accepted named values: architects, insurance, law_firms, it_companies. Also accepts any numeric category ID returned by list_categories. |
| per_page | integer | Number of results per page. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"category": "string category identifier used",
"listings": "array of business objects with id, name, description, phone, address, latitude, longitude, website, permalink",
"per_page": "integer results per page",
"max_pages": "integer total number of pages",
"total_found": "integer total number of listings found"
},
"sample": {
"data": {
"page": 1,
"category": "architects",
"listings": [
{
"id": 6698,
"name": "Cancos Tile and Stone",
"phone": "+1 (555) 012-3456",
"address": "1085 Portion Road Farmingville, NY 11738",
"website": "https://cancostileandstone.com/",
"latitude": null,
"longitude": null,
"permalink": "https://connectli.com/business/1085-portion-road-farmingville-ny-11738-cancos-tile-and-stone/",
"description": "Cancos Tile & Stone has delivered innovative tiles..."
}
],
"per_page": 50,
"max_pages": 1,
"total_found": 10
},
"status": "success"
}
}About the ConnectLI API
Endpoints and Data Returned
The API exposes two endpoints. list_categories takes no inputs and returns an array of category objects, each with an id, name, slug, and listing_count. The total_categories field tells you how many categories exist in total. Use the returned id values directly as the category parameter in list_businesses, or use one of the named aliases: architects, insurance, law_firms, or it_companies.
Browsing Business Listings
list_businesses accepts a required category parameter, plus optional page and per_page integers for pagination. Each item in the listings array includes the business id, name, description, phone, address, latitude, longitude, website, and permalink. The response also returns max_pages and total_found so you can determine the full result set size before iterating through pages.
Coverage and Scope
Data covers businesses listed on ConnectLI.com, a directory focused on Nassau County and Suffolk County on Long Island, New York. Category coverage varies — listing_count in the list_categories response tells you exactly how many businesses exist per category before you request them. Geographic coordinates (latitude, longitude) are included per listing, making it straightforward to map results or compute proximity.
The ConnectLI API is a managed, monitored endpoint for connectli.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when connectli.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official connectli.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a map of Long Island businesses in a specific category using the latitude and longitude fields.
- Compile a contact list of local architects or law firms using phone and address fields from list_businesses.
- Aggregate website URLs for businesses in a given category for outreach or SEO analysis.
- Enumerate all available business categories and their listing counts using list_categories.
- Paginate through all IT companies in Nassau & Suffolk County using the page and max_pages fields.
- Cross-reference business permalinks against your own database to detect new or removed listings.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.