π Get Your API Key (100 free credits) β’ π Full Documentation β’ π¬ Support
β‘ Zero Dependencies β’ π Native Fetch API β’ π― Production Ready
A lightweight Node.js wrapper for LinkdAPI β the most advanced API for accessing professional profile and company data. With unmatched reliability, stability, and scalability, it's perfect for developers, analysts, and anyone building tools that work with professional networking data at scale.
- Why LinkdAPI?
- Why LinkdAPI Beats Alternatives
- π¦ Installation
- β¨ Key Features
- π Quick Start
- β‘ Performance Benefits
- π API Reference
- π‘ Real-World Examples
- π Use Cases
- π§ Error Handling
- π Resources
- π License
- We deliver data reliably and efficiently without relying on complex workarounds.
- Built for scale, stability, and accuracy, so your applications run smoothly.
- Perfect for automation, data analysis, contact enrichment, and lead generation.
| Feature | LinkdAPI | SerpAPI | Scraping |
|---|---|---|---|
| Reliable Data Access | β Yes | β No | β No |
| No Proxy Management | β Yes | β No | β No |
| No Cookies Management | β Yes | β No | β No |
| Structured JSON Data | β Yes | β HTML | β Yes |
| Scalability | β Built for scale | β Rate-limited | β Manual effort |
| Pricing Transparency | β Clear pricing tiers | β Pay-per-request | β Hidden costs (proxies, CAPTCHAs) |
| API Reliability | β High uptime | β Good | β Unstable (blocks) |
| Automation-Friendly | β Full automation | β Partial | β Manual work needed |
| Support & Documentation | β Dedicated support | β Good docs | β Community-based |
| Stability & Resilience | β Optimized for reliability | β Limited | β High risk |
Install with npm:
npm install linkdapiOr with yarn:
yarn add linkdapiNote: Requires Node.js 18.0.0 or higher (uses native
fetchAPI)
|
|
import { LinkdAPI } from 'linkdapi';
// Initialize the client
const api = new LinkdAPI({ apiKey: 'your_api_key' });
// Get profile overview
const profile = await api.getProfileOverview('ryanroslansky');
console.log(`Profile: ${profile.data.fullName}`);
// Get company information
const company = await api.getCompanyInfo({ name: 'google' });
console.log(`Company: ${company.data.name}`);const { LinkdAPI } = require('linkdapi');
const api = new LinkdAPI({ apiKey: 'your_api_key' });
async function main() {
// Single request
const profile = await api.getProfileOverview('ryanroslansky');
console.log(`Profile: ${profile.data.fullName}`);
// Fetch multiple profiles concurrently
const profiles = await Promise.all([
api.getProfileOverview('ryanroslansky'),
api.getProfileOverview('satyanadella'),
api.getProfileOverview('jeffweiner08')
]);
for (const profile of profiles) {
console.log(`Name: ${profile.data.fullName}`);
}
}
main();import { LinkdAPI } from 'linkdapi';
async function fetchProfileData(username: string) {
const api = new LinkdAPI({ apiKey: 'your_api_key' });
// Get profile overview first
const overview = await api.getProfileOverview(username);
const urn = overview.data.urn;
// Fetch multiple endpoints concurrently
const [details, experience, education, skills] = await Promise.all([
api.getProfileDetails(urn),
api.getFullExperience(urn),
api.getEducation(urn),
api.getSkills(urn)
]);
return {
overview,
details,
experience,
education,
skills
};
}
// Usage
const data = await fetchProfileData('ryanroslansky');The async nature of Node.js provides significant performance improvements when making multiple API calls:
| Scenario | Sequential | Concurrent (Promise.all) | Improvement |
|---|---|---|---|
| Single Request | ~200ms | ~200ms | Same |
| 10 Sequential Requests | ~2000ms | ~2000ms | Same |
| 10 Concurrent Requests | ~2000ms | ~200ms | 10x faster |
| 100 Concurrent Requests | ~20000ms | ~500ms | 40x faster |
When to use Concurrent:
- β Scraping multiple profiles at once
- β Batch processing jobs or companies
- β Real-time data aggregation
- β Building high-performance APIs
When to use Sequential:
- β Simple scripts
- β Single requests
- β Learning/prototyping
All methods return Promises and support async/await.
πΉ Profile Endpoints (Click to expand)
// Profile Information
getProfileOverview(username) // Basic profile info
getProfileDetails(urn) // Detailed profile data
getContactInfo(username) // Email, phone, websites
getProfileAbout(urn) // About section & verification
getFullProfile({ username?, urn? }) // Complete profile data in 1 request
// Work & Education
getFullExperience(urn) // Complete work history
getCertifications(urn) // Professional certifications
getEducation(urn) // Education history
getSkills(urn) // Skills & endorsements
// Social & Engagement
getSocialMatrix(username) // Connections & followers count
getRecommendations(urn) // Given & received recommendations
getSimilarProfiles(urn) // Similar profile suggestions
getProfileReactions(urn, cursor?) // All profile reactions
getProfileInterests(urn) // Profile interests
getProfileServices(urn) // Profile services
getProfileUrn(username) // Get URN from usernameπΉ Company Endpoints (Click to expand)
// Company Search & Info
companyNameLookup(query) // Search companies by name
getCompanyInfo({ companyId?, name? }) // Get company details
getSimilarCompanies(companyId) // Similar company suggestions
getCompanyEmployeesData(companyId) // Employee statistics
getCompanyJobs(companyIds, start?) // Active job listings
getCompanyAffiliatedPages(companyId) // Subsidiaries & affiliates
getCompanyPosts(companyId, start?) // Company posts
getCompanyId(universalName) // Get ID from universal name
getCompanyDetailsV2(companyId) // Extended company infoπΉ Job Endpoints (Click to expand)
// Job Search
searchJobs({
keyword?, // Job title, skills, or keywords
location?, // City, state, or region
geoId?, // Geographic ID
companyIds?, // Specific company IDs
jobTypes?, // full_time, part_time, contract, etc.
experience?, // internship, entry_level, mid_senior, etc.
regions?, // Region codes
timePosted?, // any, 24h, 1week, 1month
salary?, // any, 40k, 60k, 80k, 100k, 120k
workArrangement?, // onsite, remote, hybrid
start? // Pagination
})
// Job Search V2 (comprehensive)
searchJobsV2({
keyword?, start?, sortBy?, datePosted?, experience?,
jobTypes?, workplaceTypes?, salary?, companies?,
industries?, locations?, functions?, titles?,
benefits?, commitments?, easyApply?, verifiedJob?,
under10Applicants?, fairChance?
})
// Job Details
getJobDetails(jobId) // Detailed job information
getJobDetailsV2(jobId) // All job statuses supported
getSimilarJobs(jobId) // Similar job postings
getPeopleAlsoViewedJobs(jobId) // Related jobs
getHiringTeam(jobId, start?) // Hiring team members
getProfilePostedJobs(profileUrn, start?, count?) // Jobs by profileπΉ Post Endpoints (Click to expand)
// Posts
getFeaturedPosts(urn) // Featured posts
getAllPosts(urn, cursor?, start?) // All posts with pagination
getPostInfo(urn) // Single post details
getPostComments(urn, start?, count?, cursor?) // Post comments
getPostLikes(urn, start?) // Post likes/reactionsπΉ Comment Endpoints (Click to expand)
getAllComments(urn, cursor?) // All comments by profile
getCommentLikes(urns, start?) // Likes on specific commentsπΉ Search Endpoints (Click to expand)
// People Search
searchPeople({
keyword?,
currentCompany?,
firstName?,
geoUrn?,
industry?,
lastName?,
profileLanguage?,
pastCompany?,
school?,
serviceCategory?,
title?,
start?
})
// Company Search
searchCompanies({
keyword?,
geoUrn?,
companySize?, // "1-10", "11-50", "51-200", "201-500", "501-1000", "1001-5000", "5001-10,000", "10,001+"
hasJobs?,
industry?,
start?
})
// Post Search
searchPosts({
keyword?,
authorCompany?,
authorIndustry?,
authorJobTitle?,
contentType?,
datePosted?,
fromMember?,
fromOrganization?,
mentionsMember?,
mentionsOrganization?,
sortBy?,
start?
})
// Other Search
searchServices({ keyword?, geoUrn?, profileLanguage?, serviceCategory?, start? })
searchSchools(keyword?, start?)πΉ Article Endpoints (Click to expand)
getAllArticles(urn, start?) // All articles by profile
getArticleInfo(url) // Article details from URL
getArticleReactions(urn, start?) // Article likes/reactionsπΉ Services Endpoints (Click to expand)
getServiceDetails(vanityname) // Get service by VanityName
getSimilarServices(vanityname) // Get similar servicesπΉ Lookup Endpoints (Click to expand)
geoNameLookup(query) // Search locations & get geo IDs
titleSkillsLookup(query) // Search skills & job titles
servicesLookup(query) // Search service categoriesπΉ System (Click to expand)
getServiceStatus() // Check API service statusπ Full documentation for all endpoints: linkdapi.com/docs
π More endpoints coming soon! Check our roadmap
import { LinkdAPI } from 'linkdapi';
async function enrichLeads(usernames: string[]) {
const api = new LinkdAPI({ apiKey: 'your_api_key' });
// Fetch all profiles concurrently
const profiles = await Promise.all(
usernames.map(username =>
api.getProfileOverview(username).catch(err => ({ error: err, username }))
)
);
const enrichedData = [];
for (let i = 0; i < usernames.length; i++) {
const profile = profiles[i];
if (profile.success) {
const data = profile.data;
enrichedData.push({
username: usernames[i],
name: data.fullName,
headline: data.headline,
location: data.location,
company: data.company
});
}
}
return enrichedData;
}
// Process 100 leads in seconds instead of minutes
const leads = ['ryanroslansky', 'satyanadella', 'jeffweiner08'];
const data = await enrichLeads(leads);import { LinkdAPI } from 'linkdapi';
async function getCompanyIntelligence(companyName: string) {
const api = new LinkdAPI({ apiKey: 'your_api_key' });
// Get company info
const companyInfo = await api.getCompanyInfo({ name: companyName });
const companyId = companyInfo.data.id;
// Fetch multiple data points concurrently
const [employees, similar, jobs, affiliates] = await Promise.all([
api.getCompanyEmployeesData(companyId),
api.getSimilarCompanies(companyId),
api.getCompanyJobs(companyId),
api.getCompanyAffiliatedPages(companyId)
]);
return {
info: companyInfo,
employees,
similar,
jobs,
affiliates
};
}
const intelligence = await getCompanyIntelligence('google');import { LinkdAPI } from 'linkdapi';
async function analyzeJobMarket(role: string, locations: string[]) {
const api = new LinkdAPI({ apiKey: 'your_api_key' });
// Search jobs in multiple locations concurrently
const results = await Promise.all(
locations.map(location =>
api.searchJobs({ keyword: role, location, timePosted: '1week' })
)
);
const analysis: Record<string, any> = {};
for (let i = 0; i < locations.length; i++) {
const result = results[i];
if (result.success) {
const jobs = result.data.jobs;
analysis[locations[i]] = {
totalJobs: jobs.length,
companies: [...new Set(jobs.map((j: any) => j.company))],
salaryRange: jobs.filter((j: any) => j.salary).map((j: any) => j.salary)
};
}
}
return analysis;
}
// Analyze "Software Engineer" jobs across 5 cities in parallel
const analysis = await analyzeJobMarket(
'Software Engineer',
['San Francisco, CA', 'New York, NY', 'Austin, TX', 'Seattle, WA', 'Boston, MA']
);
|
|
The SDK provides robust error handling with custom error classes:
import { LinkdAPI, HTTPError, NetworkError, TimeoutError } from 'linkdapi';
async function fetchWithErrorHandling() {
const api = new LinkdAPI({ apiKey: 'your_api_key' });
try {
const profile = await api.getProfileOverview('username');
if (profile.success) {
console.log(`Success: ${profile.data}`);
} else {
console.log(`API Error: ${profile.message}`);
}
} catch (error) {
if (error instanceof HTTPError) {
// Handle HTTP errors (4xx, 5xx)
console.error(`HTTP Error ${error.statusCode}: ${error.responseBody}`);
} else if (error instanceof TimeoutError) {
// Handle timeout errors
console.error(`Timeout: ${error.message}`);
} else if (error instanceof NetworkError) {
// Handle network errors
console.error(`Network Error: ${error.message}`);
} else {
// Handle unexpected errors
console.error(`Unexpected Error: ${error}`);
}
}
}The client automatically retries failed requests with exponential backoff:
// Configure retry behavior
const api = new LinkdAPI({
apiKey: 'your_api_key',
maxRetries: 5, // Default: 3
retryDelay: 2000, // Default: 1000 milliseconds
timeout: 60000 // Default: 30000 milliseconds
});
// Requests will be retried automatically on failure
const profile = await api.getProfileOverview('username');LinkdAPI is more than just an API wrapperβit's a complete solution for professional and company data access:
- Promise.all Support - Up to 40x faster for batch operations
- Zero Dependencies - Lightweight and fast
- Smart Retries - Automatic recovery from transient failures
- Type Safety - Full TypeScript support for better IDE experience
- Error Recovery - Comprehensive error handling and retries
- Battle Tested - Used by developers worldwide
- ESM & CommonJS - Works with any module system
- Async/Await - Modern JavaScript patterns
- Rich Documentation - Examples for every use case
Whether you're building tools to gather professional profiles, analyze company data, or automate recruiting workflows, LinkdAPI gives you the speed, reliability, and flexibility you needβwithout the hassle of complicated setups.
MIT License β Free to use for personal and commercial projects.
If you find LinkdAPI useful, consider:
- β Starring the project on GitHub
- π¦ Following us on Twitter/X
- π’ Sharing with your network
- π‘ Contributing ideas and feedback
Built with β€οΈ for developers who need reliable access to professional data
Website β’ Documentation β’ Twitter β’ Support
