Skip to content

[Components] ContactOut - new components #17026

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions components/contactout/actions/company-search/company-search.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-company-search",
name: "Company Search",
description: "Get company profiles matching the search criteria. [See the documentation](https://api.contactout.com/#company-search-api).",
version: "0.0.1",
type: "action",
props: {
app,
name: {
type: "string[]",
label: "Company Names",
description: "Array of company names to search for (max 50)",
optional: true,
},
domain: {
type: "string[]",
label: "Company Domains",
description: "Array of company domains to search for (max 50)",
optional: true,
},
size: {
propDefinition: [
app,
"companySize",
],
description: "Company size by number of employees",
},
hqOnly: {
type: "boolean",
label: "Headquarters Only",
description: "Filter search locations by headquarters only",
optional: true,
},
location: {
propDefinition: [
app,
"location",
],
description: "Array of locations to search for (max 50)",
},
industries: {
propDefinition: [
app,
"industry",
],
description: "Array of industries to search for (max 50)",
},
minRevenue: {
label: "Minimum Revenue",
description: "Minimum revenue of the company",
propDefinition: [
app,
"revenue",
],
},
maxRevenue: {
label: "Maximum Revenue",
description: "Maximum revenue of the company",
propDefinition: [
app,
"revenue",
],
},
yearFoundedFrom: {
type: "integer",
label: "Year Founded From",
description: "Minimum year founded of the company (min: `1985`)",
optional: true,
min: 1985,
},
yearFoundedTo: {
type: "integer",
label: "Year Founded To",
description: "Maximum year founded of the company (requires Year Founded From)",
optional: true,
},
},
async run({ $ }) {
const {
name,
domain,
size,
hqOnly,
location,
industries,
minRevenue,
maxRevenue,
yearFoundedFrom,
yearFoundedTo,
} = this;

const response = await this.app.searchCompanies({
$,
data: {
name,
domain,
size,
hq_only: hqOnly,
location,
industries,
min_revenue: minRevenue,
max_revenue: maxRevenue,
year_founded_from: yearFoundedFrom,
year_founded_to: yearFoundedTo,
},
});

$.export("$summary", "Successfully searched for companies");
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-decision-makers-search",
name: "Decision Makers Search",
description: "Get profiles of key decision makers within a specified company. [See the documentation](https://api.contactout.com/#decision-makers-api).",
version: "0.0.1",
type: "action",
props: {
app,
linkedinUrl: {
type: "string",
label: "LinkedIn Company URL",
description: "The fully formed URL of the company's LinkedIn profile (e.g., `https://linkedin.com/company/contactout`)",
optional: true,
},
domain: {
propDefinition: [
app,
"domain",
],
description: "The domain name of the company's website (e.g., example.com)",
optional: true,
},
name: {
propDefinition: [
app,
"name",
],
description: "The name of the company",
optional: true,
},
page: {
propDefinition: [
app,
"page",
],
},
revealInfo: {
propDefinition: [
app,
"revealInfo",
],
},
},
async run({ $ }) {
const {
linkedinUrl,
domain,
name,
page,
revealInfo,
} = this;

const response = await this.app.searchDecisionMakers({
$,
params: {
linkedin_url: linkedinUrl,
domain,
name,
page,
reveal_info: revealInfo,
},
});

$.export("$summary", "Successfully searched for decision makers");
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-email-to-linkedin",
name: "Email To LinkedIn",
description: "Find LinkedIn profile from email address. [See the documentation](https://api.contactout.com/#email-to-linkedin-api).",
version: "0.0.1",
type: "action",
props: {
app,
email: {
propDefinition: [
app,
"email",
],
description: "The email address to find LinkedIn profile for",
},
},
async run({ $ }) {
const {
app,
email,
} = this;

const response = await app.emailToLinkedIn({
$,
params: {
email,
},
});

$.export("$summary", "Successfully found LinkedIn profile for email");
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-get-company-info",
name: "Get Company Information",
description: "Get company information from domain names. [See the documentation](https://api.contactout.com/#company-information-from-domains).",
version: "0.0.1",
type: "action",
props: {
app,
domains: {
type: "string[]",
label: "Company Domains",
description: "An array of domain names (max 30). Each domain should be in a valid format, for example: example.com",
},
},
async run({ $ }) {
const response = await this.app.getCompanyInfo({
$,
data: {
domains: this.domains,
},
});

$.export("$summary", "Successfully retrieved company information");
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-get-contact-info-by-member-id",
name: "Get Contact Info by LinkedIn Member ID",
description: "Get contact information (email and phone) for a LinkedIn profile using a LinkedIn Member ID. [See the documentation](https://api.contactout.com/#from-linkedin-memberid).",
version: "0.0.1",
type: "action",
props: {
app,
memberId: {
propDefinition: [
app,
"memberId",
],
description: "LinkedIn Member ID is a unique identifier assigned to each member on the LinkedIn platform",
},
includePhone: {
propDefinition: [
app,
"includePhone",
],
},
},
async run({ $ }) {
const params = {
member_id: this.memberId,
};

if (this.includePhone) {
params.include_phone = this.includePhone;
}

const response = await this.app.getContactInfoByMemberId({
$,
params,
});

$.export("$summary", `Successfully retrieved contact info for LinkedIn Member ID: ${this.memberId}`);
return response;
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import app from "../../contactout.app.mjs";

export default {
key: "contactout-get-contact-info",
name: "Get Contact Info from LinkedIn Profile",
description: "Get contact information (email and phone) for a LinkedIn profile using a LinkedIn URL. [See the documentation](https://api.contactout.com/#from-linkedin-profile).",
version: "0.0.1",
type: "action",
props: {
app,
profile: {
propDefinition: [
app,
"profile",
],
description: "The LinkedIn profile URL to get contact information for. URL must begin with http and must contain linkedin.com/in/ or linkedin.com/pub/",
},
includePhone: {
propDefinition: [
app,
"includePhone",
],
},
emailType: {
propDefinition: [
app,
"emailType",
],
},
},
async run({ $ }) {
const params = {
profile: this.profile,
};

if (this.includePhone) {
params.include_phone = this.includePhone;
}

if (this.emailType) {
params.email_type = this.emailType;
}

const response = await this.app.getContactInfo({
$,
params,
});

$.export("$summary", `Successfully retrieved contact info for LinkedIn profile: ${this.profile}`);
return response;
},
};
Loading
Loading