# Baseloop Full Context > The CRM data your sales team can act on. Baseloop runs on top of your CRM. Describe any enrichment workflow in one prompt; AI agents plan and build it. From enriching new signups and building outbound lists, to routing buying signals to the right rep. Your AI co-worker builds it. Baseloop works with Anthropic Claude, OpenAI ChatGPT, and Google Gemini. This file expands the curated https://baseloop.io/llms.txt index into inline context so an AI system can answer questions about Baseloop without following every linked page. ## Product Overview - Positioning: The CRM data your sales team can act on. Baseloop runs on top of the CRM and keeps HubSpot or Salesforce as the source of truth. - Workflow model: connect CRM and data sources, describe a workflow in natural language, let agents build the steps, then run enrichment, research, scoring, branching, and sync at scale. - Primary users: sales teams, marketing/growth teams, and RevOps teams. - Sales use cases: build outbound lists, map buying committees, capture buying signals, route qualified leads, and push records into HubSpot or Salesforce. - Marketing/Growth use cases: enrich inbound signups, score leads against ICP, and route high-fit records to the right rep. - RevOps use cases: dedupe records, normalize fields, reverify contacts, enrich stale records, and keep reporting clean. - Differentiators: CRM-first, natural-language setup, no-code orchestration, output-based pricing, failed lookups cost nothing, CRM sync included. - AI surfaces: Baseloop works with Anthropic Claude, OpenAI ChatGPT, and Google Gemini through MCP. ## Core Pages - Homepage: https://baseloop.io/. Product overview, positioning, customer proof, how Baseloop works, integrations, and templates. - Pricing: https://baseloop.io/pricing. Pricing model, plan comparison, trial details, and output-based billing context. - Templates: https://baseloop.io/templates. GTM workflow templates filtered by team and use case. - Integrations: https://baseloop.io/integrations. Provider directory for CRM, outreach, AI research, data, signals, and Baseloop-native actions. ## Pricing Context - Live source of truth: https://baseloop.io/pricing - Trial: 7-day Pro trial, no credit card required. - Currency: EUR-denominated. - Included on every plan: unlimited seats and CRM integration. - Billing model: output-based pricing. Failed lookups cost nothing. Sending records to the CRM is included. ## Templates Catalog - Enrich every new account and contact in HubSpot (https://baseloop.io/templates/enrich-new-records) - Team: revops. Use case: capture-signals. Output: Enriched records. - Summary: Auto-enrich every new HubSpot record with firmographics, verified email, LinkedIn URL, and tech stack. - Outcome: Marketing and sales never see an empty HubSpot record again. Every new company arrives with industry, employee count, headquarters, and tech stack. Every new contact arrives with full name, headline, job title, and LinkedIn URL. - Integrations: HubSpot, Baseloop, BuiltWith, LinkedIn. - Workflow: Pull HubSpot companies into a Baseloop Companies table on a recurring schedule, so new records picked up by the list view get enriched automatically.; Find Company LinkedIn URL via AI lookup so all subsequent enrichment can attach to the right LinkedIn page.; Enrich Company fills firmographics, name, description, industry, employee range, employee count, headquarters, website, year founded.; Tech Stack via BuiltWith returns the count of technologies detected on the company's site (e.g. "135 technologies found"), with the full stack stored on the row for later inspection.; Push the enriched company back to HubSpot. Sales sees a complete record before the first touch.; For each new HubSpot contact, Email (Waterfall) auto-runs as a fallback to verify the work email, but skips when HubSpot's source row already supplies one. Phone (Waterfall) ships disabled per row; toggle it on when you need a mobile (phone enrichment is the most expensive credit cost in the stack, so it stays opt-in by default).; Find Contact LinkedIn URL via AI lookup, then Enrich Contact fills full name, headline, location, job title, and current company.; Push the enriched contact back to HubSpot with the enrichment fields ready for the first touch.. - Workspace preview: Enrich every new account and contact in HubSpot. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Find Company LinkedIn URL (custom_ai_agent), Enrich Company (baseloop:enrich_company), Tech Stack (builtwith:builtwith_find_technology_stack); Contacts: HubSpot Contacts (hubspot:hubspot_contacts_list_import), Email (Waterfall) (baseloop:waterfall_email_enrichment), Phone (Waterfall) (baseloop:waterfall_phone_enrichment), Find Contact LinkedIn URL (custom_ai_agent). - Clone URL: https://app.baseloop.io/share/AeuGY2bBX9NR1ght9EfmFgzy - Find broken records in your CRM (https://baseloop.io/templates/find-broken-crm-records) - Team: revops. Use case: clean-dedupe. Output: Repair queue. - Summary: Audit every record for dead domains, missing contacts, and bounced emails. Auto-route fixes. - Outcome: RevOps stops finding out about broken records when a rep complains. Every issue is tagged with a recommended action and fan-routed to the right repair queue plus a shared Review Queue for a human pass. - Integrations: HubSpot, Baseloop. - Workflow: Pull every HubSpot company into a Companies audit table.; Run an HTTP check on each company domain. The Domain Status formula tags 2xx/3xx as live, 403 as review, other 4xx/5xx as dead.; Look up associated contacts in HubSpot. The Contact Coverage formula returns has_contacts or no_contacts.; The Issue Type formula combines domain status and contact coverage into a single tag (review_domain, no_contacts, or dead_domain); the Recommended Action formula writes a one-line next step for each tagged row.; Three routing actions fan every broken row out in parallel. Domain issues land in Domain Fixes, missing committees land in Committee Fixes, and every broken row also goes to the Review Queue for a human pass. Healthy rows skip all three.; Repeat the audit on Contacts. The Bounce Status formula reads HubSpot's hard-bounce flag and marketing-email bounce counter; bounced rows route to both Email Fixes and the Review Queue.. - Workspace preview: Find broken records in your CRM. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Domain HTTP Check (baseloop:baseloop_send_http_request), Lookup Associated Contacts (hubspot:hubspot_lookup_object), Route to Committee Fixes (baseloop:send_to_table); Contacts: HubSpot Contacts (hubspot:hubspot_contacts_list_import), Route to Email Fixes (baseloop:send_to_table), Send to Review Queue (baseloop:send_to_table); Review Queue: Input. - Clone URL: https://app.baseloop.io/share/8jDpq2SsxEPW_aimp3j8UWFS - Find duplicate accounts and contacts (https://baseloop.io/templates/find-duplicate-accounts) - Team: revops. Use case: clean-dedupe. Output: Merge worklist. - Summary: Surface duplicate HubSpot companies and contacts, with an AI verdict and the recommended primary record per cluster. - Outcome: RevOps stops merging records by hand. Every duplicate cluster lands in a worklist with the recommended primary, the duplicate IDs, a one-line reason, and a deep link straight to the primary in HubSpot. - Integrations: HubSpot, Baseloop, LinkedIn. - Workflow: Pull every HubSpot company (or just the ones you want audited) into a "Companies to Check" table, one row per record.; For each row, run a HubSpot Domain Match to find every other company in HubSpot sharing the same domain. Match Count flags how many siblings exist.; Rows with two or more domain matches are routed into a "Duplicate Candidates" table, one row per matched company so every candidate gets independently enriched.; Sibling Candidates loads the rest of the cluster so the AI sees every duplicate side-by-side. Find Company LinkedIn URL anchors the cluster to a single LinkedIn page, and Enrich Company fills firmographics (name, industry, employee range, headquarters, year founded, website) so the AI compares candidates on real attributes instead of CRM noise.; AI Verdict reads the full cluster and writes a cluster-level verdict (for example, "clear_duplicate") plus a per-row Recommended Primary flag set to "yes" on exactly one row and "no" on the rest, along with the Recommended Primary Record ID and a one-line reason.; Send to Worklist routes only the row marked Recommended Primary into the Merge Worklist (Companies). Non-primary candidates stay in Duplicate Candidates for audit but skip the route. The HubSpot Link to Primary formula builds a one-click deep link to the surviving record so a reviewer approves and merges in HubSpot.; Repeat the pass for contacts. Enrich Contact fills full name, headline, location, job title; HubSpot Email Match returns the cluster size; AI Verdict picks the primary; the recommended primary lands in Merge Worklist (Contacts).. - Workspace preview: Find duplicate accounts and contacts (surface for review). Tables/actions: Companies to Check: HubSpot Companies (hubspot:hubspot_companies_list_import), HubSpot Domain Match (hubspot:hubspot_lookup_object), Send to Candidates (baseloop:send_to_table); Duplicate Candidates (Companies): Input, Sibling Candidates (baseloop:lookup_multiple_records), Find Company LinkedIn URL (custom_ai_agent), Enrich Company (baseloop:enrich_company); Merge Worklist (Companies): Input. - Map the buying committee on target accounts (https://baseloop.io/templates/map-buying-committee) - Team: revops. Use case: build-list. Output: Coverage brief. - Summary: Map the full buying committee on every target account. Coverage brief logged in HubSpot. - Outcome: Sales reps walk into every account knowing who matters. The CRM shows which committee personas are covered, which are missing, and the next step to fill the gap. - Integrations: HubSpot, LinkedIn, Baseloop. - Workflow: Pull every target company from HubSpot into a Baseloop Companies table.; Find the buying committee on LinkedIn. Title and role-pattern matching surfaces 4-8 members per account; matched contacts land in a Contacts table for follow-up classification.; On each Contacts row, Lookup Parent Company anchors the member to their HubSpot account, Classify Persona tags them as economic_buyer, champion, or user, and Email/Phone (Waterfall) optionally pull contact data.; Lookup Existing HubSpot Contact checks if the person is already in CRM; Create HubSpot Contact adds them when they're not.; Back on the Companies row, Committee Found pulls each surfaced member's persona classification from the Contacts table so the company sees the full persona mix.; Committee Coverage formats the persona mix into a structured summary that flags whether each persona category (economic buyer, champion, user) is covered or a gap, so coverage holes are scannable at a glance.; Coverage Note Brief composes a clean HTML brief listing decision-makers and gaps; Create Engagement logs the brief as a HubSpot engagement note on the company; Update HubSpot Company writes the coverage summary back to the record.. - Workspace preview: Map the buying committee on target accounts. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Find Buying Committee (linkedin:li_find_people_at_company), Committee Found (baseloop:lookup_multiple_records), Committee Coverage (custom_ai_agent); Contacts: Input, Lookup Parent Company (baseloop:lookup_single_record), Classify Persona (custom_ai_agent), Lookup Existing HubSpot Contact (hubspot:hubspot_lookup_object). - Clone URL: https://app.baseloop.io/share/yOBcLDP6A5SSCYLsNLFHTuPZ - Pull current buying signals on every account (https://baseloop.io/templates/pull-buying-signals) - Team: revops. Use case: capture-signals. Output: Signal brief. - Summary: Surface funding, hiring, and growth signals on every account. Logged as HubSpot notes. - Outcome: Sales stops missing the signal that would have made the call land. Every HubSpot account carries a fresh research brief listing the funding, hiring, and growth events that just happened. - Integrations: HubSpot, Parallel, LinkedIn, Baseloop. - Workflow: Pull every company from a HubSpot list, lifecycle stage, or saved view into Baseloop.; Find LinkedIn URL via Parallel research is a fallback that runs only when HubSpot's source row is missing the LinkedIn Company Page; in most production runs this step skips because HubSpot already supplies the page.; Run hiring activity on LinkedIn, count open roles, surface the top job titles, and pull the most recent posting date.; Run account signals research via Parallel, funding rounds, M&A, sales-GTM roles evidence, growth milestones, ATS and careers pages.; The Buying Signals Brief formula composes a clean HTML brief covering funding, M&A, GTM hiring, open roles, and growth milestones, with a short next-step recommendation at the top.; Log the brief as a HubSpot engagement note on the company so reps see it in the activity timeline before the next call.; Push the freshest signal data back to the HubSpot company record so list views and reports reflect the latest hiring count, funding round, and growth milestones.. - Workspace preview: Pull current buying signals on every account. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Find LinkedIn URL (parallel_research), Open Jobs Count (linkedin:li_company_hiring_activity), Account Signals Research (parallel_research). - Clone URL: https://app.baseloop.io/share/rffUWaUhjaTEC2VTPswdqf3U - Always-on re-verification of CRM contacts (https://baseloop.io/templates/reverify-crm-contacts) - Team: revops. Use case: clean-dedupe. Output: Updated contacts. - Summary: Catch HubSpot contacts who moved jobs or got promoted, route the new company for enrichment. - Outcome: No more outreach to people who left six months ago. Every CRM contact is silently re-verified; when somebody moves or gets promoted, the title refreshes and the new company auto-creates in HubSpot before the rep notices. - Integrations: HubSpot, LinkedIn, Baseloop. - Workflow: Pull every HubSpot contact (or just the ones in target lists) into a Baseloop Contacts table.; Find LinkedIn URL via AI lookup is a fallback that runs only when HubSpot's source row is missing the LinkedIn URL; for most contacts HubSpot already supplies one and this step skips. Resolved LinkedIn URL formula picks the HubSpot value when present, the AI value when not.; Enrich Contact pulls the contact's current employer history from LinkedIn (title, company name, company LinkedIn URL, start month/year for each tenure).; Cross-Reference reads HubSpot's recorded company against the LinkedIn current employer and writes a Job Status with three values, Unchanged, New Company, or Promoted (same company, new title), plus the matched current title, current company name, and company LinkedIn URL.; Update HubSpot Contact runs on every row to refresh the title and company on the original record, even Unchanged rows, so HubSpot always reflects the latest LinkedIn-verified data.; For New Company rows only, Send to Changed Companies pipes the new employer into a second table. Promoted and Unchanged rows skip this route. Inside Changed Companies, Lookup HubSpot Company finds the existing record or returns null; Create HubSpot Company creates a new one when the lookup is null; Resolved Company HS ID formula picks whichever exists; Update HubSpot Contact links the contact to the resolved company. Email (Waterfall) ships disabled per row; toggle it on when you need the mover's new work email.. - Workspace preview: Always-on re-verification of CRM contacts. Tables/actions: Contacts: HubSpot Contacts (hubspot:hubspot_contacts_list_import), Find LinkedIn URL (custom_ai_agent), Enrich Contact (baseloop:enrich_contact), Cross-Reference (custom_ai_agent); Changed Companies: Input, Lookup HubSpot Company (hubspot:hubspot_lookup_object), Enrich Company (baseloop:enrich_company), Create HubSpot Company (hubspot:hubspot_create_object). - Clone URL: https://app.baseloop.io/share/PX31tIbaodD8fWkmYUWeVbKc - Score and qualify every account against your ICP (https://baseloop.io/templates/score-accounts-against-icp) - Team: revops. Use case: triage-route. Output: ICP score and reason. - Summary: Auto-score every HubSpot account against your ICP, with a written reason synced to the CRM. - Outcome: Sales no longer guesses which accounts are worth working. Every company in HubSpot carries an ICP score, a qualified flag, and a one-line reason an owner can scan at a glance before picking up the phone. - Integrations: HubSpot, Baseloop. - Workflow: Pull every company from a HubSpot list, lifecycle stage, or saved view into Baseloop.; Enrich each company with verified firmographics, description, industry, employee range, headquarters, founded year.; AI scores the company against your ICP definition and writes back a tier score (the default prompt outputs 0, 60, or 80 as discrete fit tiers; edit the prompt for a different range), a Qualified true/false flag, and a one-sentence reason explaining the verdict.; Normalize the enriched fields into HubSpot's strict enums (industry, country, employee count, year founded) so the data slots cleanly without re-entry.; Push the score, qualified flag, and normalized fields back to HubSpot. Sales reps see the verdict on every record without leaving the CRM.. - Workspace preview: Score and qualify every account against your ICP. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Enrich Company (baseloop:enrich_company), ICP Score (custom_ai_agent), Normalize Firmographics (custom_ai_agent). - Clone URL: https://app.baseloop.io/share/9SXSHQu486_zyc44Jpf4xh2b - Standardize and normalize CRM fields (https://baseloop.io/templates/standardize-crm-fields) - Team: revops. Use case: clean-dedupe. Output: Normalized fields. - Summary: Normalize industry and country across HubSpot companies; clean and split job titles across contacts. - Outcome: Reporting and routing finally work because every record uses the same vocabulary. No more "USA" vs "United States" vs "us"; no more inconsistent "B2B SaaS"; no more emojis or parentheticals leaking into name fields. - Integrations: HubSpot, Baseloop. - Workflow: Pull every HubSpot company (or a target subset) into a Baseloop Companies table.; Find Missing Data fills empty industry and country fields via a one-shot AI lookup against the company name and domain. Real CRMs often arrive with these fields blank; this step closes the gap before normalization runs.; Normalize Country maps the country (whether original or just-found) into ISO codes and canonical names so reporting groups every "USA / United States / us" together.; Normalize Industry maps the industry into HubSpot's strict enum taxonomy (COMPUTER_SOFTWARE, FINANCIAL_SERVICES, and so on) so segmentation slots cleanly without re-entry.; Push the normalized industry, country code, country name, and any newly-found values back to the HubSpot company record.; Repeat across the Contacts table. Two cleanup passes run in parallel; First Name (Cleaned) and Last Name (Cleaned) formulas strip emojis, flags, and parenthetical notes that leak into name fields, and Normalize Title splits each job title into a canonical seniority (C-Level / Director / Manager / IC) and function (Sales / Marketing / RevOps / Engineering / Other), so segmentation and routing can rely on a clean two-axis taxonomy.. - Workspace preview: Standardize and normalize CRM fields. Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Find Missing Data (custom_ai_agent), Normalize Country (custom_ai_agent), Normalize Industry (custom_ai_agent); Contacts: HubSpot Contacts (hubspot:hubspot_contacts_list_import), Normalize Title (custom_ai_agent), Update HubSpot Contact (hubspot:hubspot_update_object). - Clone URL: https://app.baseloop.io/share/zPd_b79vtq7YkQ1F9DvRYXOY - Tier every account by priority (T1/T2/T3) (https://baseloop.io/templates/tier-accounts-by-priority) - Team: revops. Use case: triage-route. Output: T1/T2/T3 tier. - Summary: Auto-tier every account T1/T2/T3, with the reason written back to HubSpot. - Outcome: Sales no longer triages by spreadsheet. Every account in HubSpot has a tier and a one-line reason, owners attack T1s first, T2s second, and skip the T3 noise entirely. - Integrations: HubSpot, Baseloop. - Workflow: Pull every company from a HubSpot list, lifecycle stage, or saved view into Baseloop.; AI tiers each account into T1, T2, or T3 against your priority rules, fit, intent, ownership, geography, anything you write into the prompt. The default prompt writes the values as tier_1, tier_2, tier_3 so they slot into HubSpot select fields cleanly; edit the prompt if you want different labels.; AI writes a one-line reason for the tier so the rep knows why before they pick up the phone.; Push the tier and reason back to the HubSpot company record. Reps see priority on every account in the same place they already work.. - Workspace preview: Tier every account by priority (T1/T2/T3). Tables/actions: Companies: HubSpot Companies (hubspot:hubspot_companies_list_import), Account Tier (custom_ai_agent), Update HubSpot Company (hubspot:hubspot_update_object). - Clone URL: https://app.baseloop.io/share/GgHPkqCKlStNBXq48WNoqGOI ## Integrations Catalog - Baseloop (https://baseloop.io/integrations/baseloop) - Category: baseloop. Actions: 9. - Tagline: Run Baseloop-native actions inside any workflow. - Description: Connect Baseloop to Baseloop and run automated workflows directly from your data tables. Run Baseloop-native actions inside any workflow. - BuiltWith (https://baseloop.io/integrations/builtwith) - Category: data. Actions: 1. - Tagline: Detect the technology stack of any company. - Description: Connect Baseloop to BuiltWith and run automated workflows directly from your data tables. Detect the technology stack of any company. - HeyReach (https://baseloop.io/integrations/heyreach) - Category: sequencer. Actions: 1. - Tagline: Run LinkedIn outreach campaigns from your enriched data. - Description: Connect Baseloop to HeyReach and run automated workflows directly from your data tables. Run LinkedIn outreach campaigns from your enriched data. - HubSpot (https://baseloop.io/integrations/hubspot) - Category: crm. Actions: 7. - Tagline: Sync enriched companies, contacts, and engagements into HubSpot. - Description: Connect Baseloop to HubSpot and run automated workflows directly from your data tables. Sync enriched companies, contacts, and engagements into HubSpot. - Instantly (https://baseloop.io/integrations/instantly) - Category: sequencer. Actions: 1. - Tagline: Push contacts into Instantly campaigns and sync replies back. - Description: Connect Baseloop to Instantly and run automated workflows directly from your data tables. Push contacts into Instantly campaigns and sync replies back. - LaGrowthMachine (https://baseloop.io/integrations/lagrowthmachine) - Category: sequencer. Actions: 1. - Tagline: Trigger LaGrowthMachine multi-channel sequences. - Description: Connect Baseloop to LaGrowthMachine and run automated workflows directly from your data tables. Trigger LaGrowthMachine multi-channel sequences. - Lemlist (https://baseloop.io/integrations/lemlist) - Category: sequencer. Actions: 1. - Tagline: Push contacts into Lemlist campaigns from any signal. - Description: Connect Baseloop to Lemlist and run automated workflows directly from your data tables. Push contacts into Lemlist campaigns from any signal. - LinkedIn (https://baseloop.io/integrations/linkedin) - Category: data. Actions: 6. - Tagline: Import LinkedIn data and track hiring, engagement, and Sales Navigator signals at scale. - Description: Connect Baseloop to LinkedIn and run automated workflows directly from your data tables. Import LinkedIn data and track hiring, engagement, and Sales Navigator signals at scale. - Parallel (https://baseloop.io/integrations/parallel) - Category: ai-research. Actions: 1. - Tagline: Run AI research agents in parallel for company and contact intelligence. - Description: Connect Baseloop to Parallel and run automated workflows directly from your data tables. Run AI research agents in parallel for company and contact intelligence. - Perplexity (https://baseloop.io/integrations/perplexity) - Category: ai-research. Actions: 1. - Tagline: Use Perplexity for grounded company and contact research. - Description: Connect Baseloop to Perplexity and run automated workflows directly from your data tables. Use Perplexity for grounded company and contact research. - Reply (https://baseloop.io/integrations/reply) - Category: sequencer. Actions: 1. - Tagline: Send personalized outreach via Reply.io. - Description: Connect Baseloop to Reply and run automated workflows directly from your data tables. Send personalized outreach via Reply.io. - Salesforce (https://baseloop.io/integrations/salesforce) - Category: crm. Actions: 8. - Tagline: Sync enriched accounts, contacts, leads, and opportunities into Salesforce. - Description: Connect Baseloop to Salesforce and run automated workflows directly from your data tables. Sync enriched accounts, contacts, leads, and opportunities into Salesforce, and log notes, tasks, and events on any record. - Slack (https://baseloop.io/integrations/slack) - Category: comms. Actions: 1. - Tagline: Send actionable Slack messages from your workflow. - Description: Connect Baseloop to Slack and run automated workflows directly from your data tables. Send actionable Slack messages from your workflow. - Smartlead (https://baseloop.io/integrations/smartlead) - Category: sequencer. Actions: 1. - Tagline: Run Smartlead campaigns at scale, fed by Baseloop signals. - Description: Connect Baseloop to Smartlead and run automated workflows directly from your data tables. Run Smartlead campaigns at scale, fed by Baseloop signals. - Vidu (https://baseloop.io/integrations/vidu) - Category: other. Actions: 1. - Tagline: Generate personalized video at scale via Vidu. - Description: Connect Baseloop to Vidu and run automated workflows directly from your data tables. Generate personalized video at scale via Vidu. ## Actions Catalog - Custom AI Agent with Baseloop (https://baseloop.io/integrations/baseloop/custom-ai-agent) - API name: custom_ai_agent. Provider: Baseloop. - Summary: AI agent for content creation and web research on your table data - Description: Run a per-row LLM call for classification, scoring, qualification, generation, extraction, or research. Define a prompt with column references and a set of structured output fields; the model's response lands in typed columns (text, number, checkbox, select, multi_select, email, url) ready for downstream actions to read. Choose between flat fields (a fixed set of scalars per row, e.g. verdict + score + reasoning) and JSON Schema (structured arrays you can fan out into another table via Send to Table). Web search is opt-in and gated by a per-row credit cap, so a runaway research prompt fails the row before it overspends. Provider options: OpenAI, Anthropic, Google. Use your own API key to pay the provider directly instead of using Baseloop credits. - Inputs: - Prompt (prompt) [LongText, required]: Your instruction for the AI. Use /FieldName to reference your table columns (e.g., /Company, /Product). - Enable Web Search (enableWebSearch) [Checkbox, optional]: Let AI search the internet for real-time information and research. - searchProvider (searchProvider) [DynamicProperties, optional]: Choose which search engine the AI agent uses for web research. - hardStop (hardStop) [DynamicProperties, optional]: Maximum cost in USD per record for web research. - system (system) [DynamicProperties, optional]: Define the role and behavior of the AI assistant. - Examples (examples) [DynamicProperties, optional]: Teach the AI with input/output examples. - outputFormat (outputFormat) [Radio, required] - outputFieldsConfig (outputFieldsConfig) [DynamicProperties, optional]: The response - Provider (provider) [StaticDropdown, required]: Choose your AI model. - Model (model) [Dropdown, required]: Choose your AI model. - Use my own API Key (useOwnAPI) [Checkbox, optional]: Pay your provider directly instead of using Baseloop credits. - openRouterConfig (openRouterConfig) [DynamicProperties, optional]: Use one account to access all AI providers instead of managing separate accounts. - ownAuth (ownAuth) [DynamicProperties, optional] - Requests (rateLimitRequests) [Number, optional]: Number of requests allowed in the time window. Set to 0 for unlimited (fastest). - Per seconds (rateLimitPerSeconds) [Number, optional]: Time window in seconds. Example: For "100 per 10 seconds", enter 10. - Outputs: A structured response generated by the LLM and written back to the row, formatted to the output fields you define when configuring the action. - Enrich Company with Baseloop (https://baseloop.io/integrations/baseloop/enrich-company) - API name: enrich_company. Provider: Baseloop. - Summary: Enrich company data using LinkedIn URL - Description: Takes a LinkedIn company URL on any row and returns a structured company object: name, website, industry, employee count, employee range, headquarters, country, year founded, follower count, and the LinkedIn ID. Each property maps to its own typed field downstream, so industry filters, ICP scoring, and territory routing can read clean values without parsing JSON. Auto-converts `/school/` URLs to `/company/`. Companies not found on LinkedIn return a "Not found" output and consume no credits. Used at the top of every TAM, ABM, recycled-lead, PLG re-engagement, and inbound pipeline before downstream qualification or contact-finding. - Inputs: - LinkedIn URL (linkedinUrl) [StaticMultiSelectDropdown, required]: Column containing the LinkedIn company URL - Output Columns (selectedOutputFields) [StaticMultiSelectDropdown, optional]: Select enrichment data to extract into separate columns. Leave empty to skip auto-extraction. - Outputs: Enriched company data extracted from LinkedIn: name, website, industry, employee count + range, follower count, headquarters, country, year founded, description, and any custom fields you map. - Enrich Contact with Baseloop (https://baseloop.io/integrations/baseloop/enrich-contact) - API name: enrich_contact. Provider: Baseloop. - Summary: Enrich contact data using LinkedIn profile - Description: Takes a LinkedIn profile URL on any row and returns a structured person object: full name, headline, current title, current employer, employment history, location, languages, skills, and education. Each property maps to its own typed field downstream, so seniority filters, job-change detection, and outbound personalization can read clean values without parsing JSON. The action also enriches the contact's current company (website, employee count, employee range, description, industry) so a contact-first workflow can derive firmographics without a second action. Email and phone are not part of the output; use Waterfall Email Enrichment and Waterfall Phone Enrichment for those. Profiles not found on LinkedIn return a "Not found" output and consume no credits. - Inputs: - LinkedIn URL (linkedinUrl) [StaticMultiSelectDropdown, required]: Column containing the LinkedIn profile URL - Output Columns (selectedOutputFields) [StaticMultiSelectDropdown, optional]: Select enrichment data to extract into separate columns. Leave empty to skip auto-extraction. - Outputs: Enriched contact data extracted from LinkedIn: full name, headline, current and past employers, location, education, skills, and any custom fields you map. Email and phone are not part of this action's output — use Waterfall Email or Waterfall Phone for those. - Lookup Multiple Records in Other Table with Baseloop (https://baseloop.io/integrations/baseloop/lookup-multiple-records) - API name: lookup_multiple_records. Provider: Baseloop. - Summary: Search another table and return all matching records - Description: Joins one Baseloop table to many records on another. Pick the target table, the column to filter on, and the operator (`equals` for exact match, `contains` for case-insensitive substring). The action returns every matching record (up to 100) in a single column on the source row, so downstream actions can fan out, count, or reference the matched data. Used to power campaign-router tables (one master "Campaign Router" feeding ten campaign-specific tables), to look up every contact attached to a company, or to surface every Smartlead reply tied to an outbound run. Free action, no credits. - Inputs: - Table to Search (targetListId) [ListSelector, required]: Select the table to search for matching records. - Filter Operator (targetColumn) [StaticDropdown, required]: How to match the value against the target column. - Filter Operator (filterOperator) [StaticDropdown, required]: How to match the value against the target column. - Row Value (rowValue) [Number, required]: Select the column from the current table to use as the search value. - Limit (limit) [Number, optional]: Enter a number between 0 and 100 - Outputs: Every matching record from the target table, joined by your lookup field. Surfaces in a dedicated column and unlocks downstream actions on each matched row. - Lookup Single Record in Other Table with Baseloop (https://baseloop.io/integrations/baseloop/lookup-single-record) - API name: lookup_single_record. Provider: Baseloop. - Summary: Search another table and return the first matching record - Description: Joins one Baseloop table to a single record on another. Pick the target table, the column to filter on, and the operator (`equals` for exact match, `contains` for case-insensitive substring). The action returns the first matching record (or null when no match exists) in a single column on the source row, so downstream actions can branch cleanly on found versus not-found. Common patterns: dedupe checks against a master list, blocklist lookups against closed-won or churned accounts, finding the deal owner for a HubSpot company, attaching a webinar registrant to its parent account. Free action, no credits. - Inputs: - Table to Search (targetListId) [ListSelector, required]: Select the table to search for matching records. - Filter Operator (targetColumn) [StaticDropdown, required]: How to match the value against the target column. - Filter Operator (filterOperator) [StaticDropdown, required]: How to match the value against the target column. - Row Value (rowValue) [unknown, required]: Select the column from the current table to use as the search value. - Outputs: A single matching record from the target table, joined by your lookup field. Returns null when no match is found, so downstream actions can branch cleanly. - Send HTTP Request with Baseloop (https://baseloop.io/integrations/baseloop/send-http-request) - API name: baseloop_send_http_request. Provider: Baseloop. - Summary: Send an HTTP request to a specified URL with dynamic data from your table - Description: Call any REST endpoint from a row. Pick the method (GET, POST, PUT, PATCH, DELETE, HEAD), pass a URL, and substitute column values into the URL, headers, query params, or JSON body using `{{field_name}}` references. JSON responses are parsed automatically so individual fields can be referenced in downstream actions. The escape hatch for any tool with an API but no first-party Baseloop integration: inbound webhooks, event-registration sync, sequencer reply ingestion, call-data import, visitor identification, and vendor-specific endpoints. Use the dedicated provider action when one exists (HubSpot, Lemlist, Smartlead, Apollo, Reply, Instantly) since those handle auth refresh, retries, and rate limits that raw HTTP doesn't. Free action, no credits. - Inputs: - Method (method) [StaticDropdown, required] - URL (url) [LongText, required] - body (body) [DynamicProperties, optional] - Headers (headers) [Object, optional]: Number of requests allowed in the time window. Set to 0 for unlimited (fastest). - Query Params (queryParams) [Object, optional]: Number of requests allowed in the time window. Set to 0 for unlimited (fastest). - Requests (rateLimitRequests) [Number, optional]: Number of requests allowed in the time window. Set to 0 for unlimited (fastest). - Per seconds (rateLimitPerSeconds) [Number, optional]: Time window in seconds. Example: For "100 per 10 seconds", enter 10. - Timeout (seconds) (timeout) [Number, optional]: How long the request should wait for a response. - Outputs: The HTTP response body and status code, written back to the row. JSON responses are parsed automatically so individual fields can be referenced in downstream actions. - Send to Table with Baseloop (https://baseloop.io/integrations/baseloop/send-to-table) - API name: send_to_table. Provider: Baseloop. - Summary: Send rows from this table to another table - Description: Copies rows from one Baseloop table into another with field mapping you control. Two modes: `send_row` pushes one source row to one destination row; `send_for_each_item` fans an array column (typically a Custom AI Agent JSON Schema output, like a "founders" or "contacts" array) out into one destination row per item, with optional `column:` references that bake parent-row context into every fanned-out row. Origin metadata (source table plus record ID) makes re-runs upsert instead of duplicate, so the same workflow can re-route a row without producing extras on backfills or resyncs. Used to break a single source table into specialized downstream tables: route qualified leads to a campaign-specific table, push winners from a sourcing table into a routing table for ownership assignment, fan a webhook payload into the right destination based on its attributes. Free action, no credits. - Inputs: - What should this action do? (mode) [StaticDropdown, required]: Choose how data flows from this table to the destination. - sourceConfig (sourceConfig) [DynamicProperties, optional]: Select an action column that contains the array data to expand. - Which table do you want to send data to? (destinationListId) [ListSelector, required]: Choose an existing table or create a new one. Columns will be set up automatically. - Which fields do you want to send? (fieldMappings) [KeyValue, required]: Map data from this table to columns in the destination table. - Outputs: A new row inserted into the destination table with every field you mapped, plus a back-reference to the source row for traceability. - Waterfall Email Enrichment with Baseloop (https://baseloop.io/integrations/baseloop/waterfall-email-enrichment) - API name: waterfall_email_enrichment. Provider: Baseloop. - Summary: Enrich records with work emails using multiple providers in a waterfall pattern - Description: Find a verified work email by trying email-finder providers in cascade, stopping at the first provider that returns a deliverable result. Pass first name, last name, and at least one of company name or domain (LinkedIn URL is optional and significantly improves match rate). Each cascade returns the email, the provider that resolved it, and a verification status for downstream filtering. Bring your own API keys to configure provider order across BetterContact, FullEnrich, Findymail, Prospeo, DataGMA, Icypeas, LeadMagic, and Surfe; without keys of your own, Baseloop handles the cascade for you. Only successful enrichments cost credits, so unmatched rows are free. Catch-all addresses are returned as a fallback only when no fully verified email is found. Used as the email step of every outbound pipeline before push to Smartlead, Lemlist, or Instantly. - Inputs: - First Name (firstName) [unknown, required]: Column containing the first name - Last Name (lastName) [Checkbox, required]: Column containing the last name - Company Name (companyName) [Checkbox, optional]: Column containing the company name - Domain (domain) [Checkbox, optional]: Column containing the company domain (e.g., example.com) - LinkedIn URL (linkedinUrl) [Checkbox, optional]: Column containing the LinkedIn profile URL (optional, improves accuracy) - Use my own API Keys (Free) (useOwnAPI) [Checkbox, optional]: Save credits by using your own API key. - ownAuth (ownAuth) [DynamicProperties, optional]: Select the providers to search for emails - Enable Catch-All Email Verification (verifyCatchAll) [DynamicProperties, optional]: Enable catch-all email verification. Only available for BetterContact Pro or Enterprise plans. - Outputs: A verified work email for the contact, sourced through a cascade of providers (most accurate first, falling back as needed). Returns the provider that resolved it for downstream tracking. - Waterfall Phone Enrichment with Baseloop (https://baseloop.io/integrations/baseloop/waterfall-phone-enrichment) - API name: waterfall_phone_enrichment. Provider: Baseloop. - Summary: Enrich records with phone numbers using multiple providers in a waterfall pattern - Description: Find a verified mobile or direct phone number by trying phone-data providers in cascade, stopping at the first provider that returns a result. Requires first name, last name, and company name; LinkedIn URL is optional and improves accuracy. Each cascade returns the phone number and the provider that resolved it, for downstream tracking. Bring your own API keys to configure provider order across BetterContact, FullEnrich, and Surfe; without keys of your own, Baseloop handles the cascade for you. Only successful enrichments cost credits, so unmatched rows are free. Phone enrichment is the most expensive enrichment action, so gate it behind upstream qualification (ICP fit, role check) before firing. Used to feed cold-calling tools and to populate the phone column on LinkedIn-plus-phone outbound tracks. - Inputs: - First Name (firstName) [Checkbox, required]: Column containing the first name - Last Name (lastName) [Checkbox, required]: Column containing the last name - Company Name (companyName) [Checkbox, required]: Column containing the company name - LinkedIn URL (linkedinUrl) [Checkbox, optional]: Column containing the LinkedIn profile URL (improves accuracy) - Use my own API Keys (Free) (useOwnAPI) [Checkbox, optional]: Save credits by using your own API key. - ownAuth (ownAuth) [DynamicProperties, optional]: Select the providers to search for phone numbers - Outputs: A verified phone number for the contact, sourced through a cascade of providers. Returns the provider that resolved it and a confidence indicator. - Find Technology Stack with BuiltWith (https://baseloop.io/integrations/builtwith/find-technology-stack) - API name: builtwith_find_technology_stack. Provider: BuiltWith. - Summary: Find the technology stack of a company based on their website URL - Description: Detects the technologies running on a company's domain (frameworks, analytics, hosting, payments, CMS, ad platforms) via BuiltWith and writes them back as a categorized list. Use it to score companies on stack-fit, trigger competitive plays when a target swaps tools, and enrich ABM segmentation. Pass any column holding a website URL or domain. The action normalizes the input, validates it (IP addresses, localhost, and TLD-less strings are rejected before the provider call), and groups the result into technology categories on the cell's full value. An optional `keywords` array filters down to specific tools (e.g., `["HubSpot", "Salesforce"]`). - Inputs: - Website (website) [Array, optional]: Company website URL column - Keywords (keywords) [Array, optional]: Filter technologies by keywords (e.g., "Hubspot", "Salesforce") - Outputs: The technology stack detected on the company's domain, including frameworks, analytics tools, hosting providers, payment processors, CMS, and more, written back as a structured list. - Add to Campaign with HeyReach (https://baseloop.io/integrations/heyreach/add-to-campaign) - API name: heyreach_add_to_campaign. Provider: HeyReach. - Summary: Add records from your table to a HeyReach campaign - Description: Adds a contact from any row in a Baseloop table to a HeyReach campaign as a new lead. Map first name, last name, and LinkedIn URL to your columns; HeyReach handles the actual outreach on its side. Custom fields accept `{{column}}` references so per-lead variables (persona, icebreaker, opener) land directly in your campaign templates. Output is `Added`, `Updated`, or `Failed` depending on whether the contact was new, already enrolled, or rejected by HeyReach validation. - Inputs: - Campaign (campaignId) [Dropdown, required]: The Campaign you want to add the record to. - First Name (firstName) [unknown, required]: LinkedIn profile URL - Last Name (lastName) [unknown, required]: LinkedIn profile URL - LinkedIn URL (linkedinUrl) [unknown, required]: LinkedIn profile URL - Company Name (companyName) [KeyValue, optional]: Map table columns to custom HeyReach fields. - Custom Fields (customFields) [KeyValue, optional]: Map table columns to custom HeyReach fields. - Outputs: Confirmation that the contact was added to the HeyReach campaign, plus the HeyReach lead ID for downstream sync. Records that fail validation are reported with the rejection reason. - Import Companies with HubSpot (https://baseloop.io/integrations/hubspot/companies-list-import) - API name: hubspot_companies_list_import. Provider: HubSpot. - Summary: Import companies from a HubSpot list into your table - Description: Import Companies pulls every company in a chosen HubSpot static or dynamic list into a Baseloop table, one row per company. Pick which HubSpot properties to bring in and a column is created for each automatically; re-runs upsert by HubSpot ID so the Baseloop table tracks the list as it changes. This is the canonical source action for from-HubSpot company workflows: TAM enrichment kickoff, blocklist sync (closed-won or churned exclusion), recycled-lead pipelines, and one-off enrichment passes against existing CRM accounts. Caps at 10,000 companies per import. Free action. - Inputs: - HubSpot Companies List (listId) [Dropdown, required]: Choose a companies list to import from. - Company Properties to Import (selectedProperties) [MultiSelectDropdown, required]: Select which company properties to import. Columns will be created automatically. - Outputs: Companies imported from the chosen HubSpot list into your Baseloop table, one row per company, with all selected HubSpot properties mapped to columns. - Import Contacts with HubSpot (https://baseloop.io/integrations/hubspot/contacts-list-import) - API name: hubspot_contacts_list_import. Provider: HubSpot. - Summary: Import contacts from a HubSpot list into your table - Description: Import Contacts pulls every contact in a chosen HubSpot static or dynamic list into a Baseloop table, one row per contact. Pick which HubSpot properties to bring in and a column is created for each automatically; re-runs upsert by HubSpot ID so the Baseloop table tracks the list as it changes. This is the canonical source action for from-HubSpot contact workflows: bringing an existing book of business into Baseloop for re-enrichment, refreshing stale contact data, or triggering downstream campaigns off a HubSpot list. Caps at 10,000 contacts per import. Free action. - Inputs: - HubSpot Contacts List (listId) [Dropdown, required]: Choose a contacts list to import from. - Contact Properties to Import (selectedProperties) [MultiSelectDropdown, required]: Select which contact properties to import. Columns will be created automatically. - Outputs: Contacts imported from the chosen HubSpot list into your Baseloop table, one row per contact, with all selected HubSpot properties mapped to columns. - Create Engagement with HubSpot (https://baseloop.io/integrations/hubspot/create-engagement) - API name: hubspot_create_engagement. Provider: HubSpot. - Summary: Create an engagement (note or task) for a HubSpot contact or company - Description: Create Engagement writes a note or task onto an existing HubSpot company or contact. Note bodies and task subjects support inline `{{field}}` references, so a single template composes content from multiple Baseloop columns ("Reply from {{contact_name}}: {{reply_body}}"). Tasks accept status, priority, type, due-date, and HubSpot owner. The action requires the record's `hs_object_id` already on the row, sourced from a Lookup Object step or a HubSpot list import. Engagement properties use fixed HubSpot internal names (`hs_note_body`, `hs_task_subject`, `hs_task_status`) and are not configurable beyond what HubSpot exposes. The action batches 5 records at a time to stay inside HubSpot's API rate limits, and returns the new engagement ID with a deep link back to the parent record. - Inputs: - Object Type (objectType) [StaticDropdown, required]: The type of HubSpot object to associate this engagement with. - Engagement Type (engagementType) [StaticDropdown, required]: The type of engagement to create. - objectIdConfig (objectIdConfig) [DynamicProperties, required]: The HubSpot ${objectLabel} ID to associate this engagement with. - Engagement Details (engagementProperties) [DynamicProperties, required]: When this engagement occurred (ISO 8601 format). Defaults to now if not provided. - Outputs: The newly-created engagement (note or task) in HubSpot, plus its engagement ID and a deep link back to the HubSpot record. - Create Object with HubSpot (https://baseloop.io/integrations/hubspot/create-object) - API name: hubspot_create_object. Provider: HubSpot. - Summary: Create a new company or contact in HubSpot from your table data - Description: Create Object writes a new HubSpot company or contact from any row in a Baseloop table. Map your columns to HubSpot internal property names (firstname, domain, lifecyclestage, jobtitle, etc.); only writeable properties are listed, with discovery handled live against the connected portal. One run can also enroll the new record in a static HubSpot list and associate it with an existing parent (link a contact to its company, or a company to a parent company). Toggle ignore-blanks to skip empty cell values so partial-data rows do not overwrite HubSpot fields with blanks. The action batches 5 records at a time to stay inside HubSpot's API rate limits. For idempotent writes, chain Lookup Object first and gate Create on the Lookup returning isNotFound. The created record's `hs_object_id` lands in a Baseloop receiver field that downstream Update and association steps can reference through an Effective ID formula. - Inputs: - Object Type (objectType) [StaticDropdown, required]: The type of HubSpot object to create. - Field Mapping (fieldMapping) [KeyValue, required]: Map your table columns to HubSpot properties. - Ignore blank values (ignoreBlanks) [Checkbox, optional]: Skip fields with empty or null values when creating the object. - Add to HubSpot list (addToList) [Checkbox, optional]: Add the created object to a static HubSpot list. - listConfig (listConfig) [DynamicProperties, optional]: Select a static list to add the object to. - Associate with another object (associateWithObject) [Checkbox, optional]: Associate this object with an existing HubSpot object. - associationConfig (associationConfig) [DynamicProperties, optional]: The type of HubSpot object to associate with. - Outputs: The newly-created HubSpot company or contact, plus its object ID and a deep link back to the HubSpot record. - Get Engagements with HubSpot (https://baseloop.io/integrations/hubspot/get-engagements) - API name: hubspot_get_engagements. Provider: HubSpot. - Summary: Get engagements (notes, calls, meetings, tasks, or emails) for a HubSpot object - Description: Get Engagements pulls a HubSpot contact's activity history (notes, calls, meetings, tasks, or emails) into Baseloop as structured data, with each engagement's type, body, and timestamp. The action requires the contact's `hs_object_id` on the row, sourced from a Lookup Object step or a HubSpot contacts list import. This is read-only. Each field returns one engagement type; create separate fields for notes, emails, etc. when more than one is needed. Default `maxResults` is 10 per row. Pair the output with a downstream Custom AI Agent to summarize the relationship, score recency of last touch, or classify reply sentiment before re-engagement. The action batches 5 records at a time to stay inside HubSpot's API rate limits. - Inputs: - Object Type (objectType) [StaticDropdown, required]: The type of HubSpot object to get engagements for. - objectId (objectId) [DynamicProperties, required]: The HubSpot Contact ID to get engagements for. - Engagement Type (engagementType) [StaticDropdown, required]: The type of engagement to retrieve. Create separate actions for each type you need. - Max results (maxResults) [Number, optional]: Maximum number of engagements to retrieve (default: 10). - Outputs: Every engagement (note, task, call, meeting, or email) attached to the HubSpot object, written back as a structured list with type, body, and timestamp. - Lookup Object with HubSpot (https://baseloop.io/integrations/hubspot/lookup-object) - API name: hubspot_lookup_object. Provider: HubSpot. - Summary: Search for a company, contact, deal, or lead in HubSpot using your table data - Description: Lookup Object searches HubSpot for an existing company, contact, deal, or lead that matches your row data, then returns the record's `hs_object_id` plus any selected properties. Filters compile to an OR-of-AND structure: groups join with OR, conditions inside a group join with AND, supporting EQ, NEQ, CONTAINS_TOKEN, and NOT_CONTAINS_TOKEN. The output drives dedupe and branching across push-to-HubSpot workflows. Use the `isFound` and `isNotFound` operators to gate downstream Create or Update steps so a workflow updates existing records, creates missing ones, and never duplicates. Returns null when no match exists. Default limit is 1 result; raise it when multiple matches are expected. - Inputs: - What type of object do you want to lookup? (objectType) [StaticDropdown, required]: The type of HubSpot object to search for. - filterConfig (filterConfig) [DynamicProperties, optional] - propertiesConfig (propertiesConfig) [DynamicProperties, optional] - advancedConfig (advancedConfig) [DynamicProperties, optional]: Limit the number of ${objectLabel} to return. - Outputs: The matching HubSpot record (company, contact, deal, or lead) along with all properties you select, plus a deep link back to HubSpot. Returns null when no match exists. - Update Object with HubSpot (https://baseloop.io/integrations/hubspot/update-object) - API name: hubspot_update_object. Provider: HubSpot. - Summary: Update an existing company or contact in HubSpot from your table data - Description: Update Object writes fresh data onto an existing HubSpot company or contact identified by its `hs_object_id`. Map your columns to HubSpot internal property names; only updateable properties are listed, with discovery handled live against the connected portal. Toggle ignore-blanks so empty cells skip the write instead of nulling out HubSpot fields, which is the right default for partial-data rows. One run can also enroll the updated record in a static HubSpot list or re-associate it with a different parent company. The action batches 5 records at a time to stay inside HubSpot's API rate limits. In a Lookup-then-Create-then-Update chain, point recordId at an Effective HubSpot ID formula that merges the Lookup result and any newly-created record's ID. Without that, Update silently fails on rows where the record was just created in the same run because the bare Lookup field returned null. - Inputs: - Object Type (objectType) [StaticDropdown, required]: The type of HubSpot object to update. - recordId (recordId) [DynamicProperties, required]: The HubSpot ID of the company to update. - Field Mapping (fieldMapping) [KeyValue, required]: Map your table columns to HubSpot properties. - Ignore blank values (ignoreBlanks) [Checkbox, optional]: Skip fields with empty or null values when updating the object. - Add to HubSpot list (addToList) [Checkbox, optional]: Add the updated object to a static HubSpot list. - listConfig (listConfig) [DynamicProperties, optional]: Select a static list to add the object to. - Associate with another object (associateWithObject) [Checkbox, optional]: Associate this object with an existing HubSpot object. - associationConfig (associationConfig) [DynamicProperties, optional]: The type of HubSpot object to associate with. - Outputs: Confirmation that the HubSpot object was updated, with the property names that changed and a deep link back to the HubSpot record. - Add to Campaign with Instantly (https://baseloop.io/integrations/instantly/add-to-campaign) - API name: instantly_add_to_campaign. Provider: Instantly. - Summary: Add a record to a campaign in Instantly from your table data - Description: Adds a contact from any row in a Baseloop table to an Instantly campaign as a new lead. Map email and custom variables to your columns; Instantly handles the actual sending. If a lead already exists in the workspace, the action falls back to a PATCH and reports `Updated` instead of failing. By default, leads already enrolled in any campaign in the workspace are skipped; toggle `skipIfInWorkspace` off to allow the same contact across multiple campaigns. - Inputs: - Campaign (campaignId) [Dropdown, required]: The Campaign you want to add the lead to. - Email (email) [unknown, required]: Email address (required) - First Name (firstName) [KeyValue, optional] - Last Name (lastName) [KeyValue, optional]: Map table columns to custom Instantly fields. - Company Name (companyName) [KeyValue, optional]: Map table columns to custom Instantly fields. - Custom Fields (customFields) [KeyValue, optional]: Map table columns to custom Instantly fields. - Skip if in Any Campaign (skipIfInWorkspace) [Checkbox, optional]: If enabled, skips adding the lead if it exists in any campaign within your Instantly workspace. Disable to allow adding leads to multiple campaigns. - Outputs: Confirmation that the contact was added to the Instantly campaign, plus the Instantly lead ID for status tracking. Duplicates and validation failures surface with their reason. - Create or Update Lead with LaGrowthMachine (https://baseloop.io/integrations/lagrowthmachine/create-or-update-lead) - API name: lagrowthmachine_create_or_update_lead. Provider: LaGrowthMachine. - Summary: Create or update a lead in LaGrowthMachine from your table data - Description: Create or Update Lead writes a row into LaGrowthMachine in a chosen audience and triggers the audience's matching multi-channel sequence. Map standard fields (email, first name, last name, gender, phone, LinkedIn URL, job title, location, company name, company URL, industry, CRM ID) plus up to 10 custom attribute slots (`customAttribute1` through `customAttribute10`). Pass an existing `leadId` to update a lead in place, or omit it to create a new one. LaGrowthMachine caps at 10 custom attribute slots; values beyond `customAttribute10` are silently dropped by the API, so plan the slot mapping accordingly. Email is sent as `proEmail` on the LaGrowthMachine side. Returns the lead ID after create or update, plus a flag indicating whether the row matched an existing lead or created a fresh one. - Inputs: - Audience (audience) [Dropdown, required] - LaGrowthMachine Lead ID (leadId) [unknown, optional]: Existing lead ID for updates - Email (email) [unknown, optional] - First Name (firstName) [unknown, optional] - Last Name (lastName) [unknown, optional] - Gender (gender) [unknown, optional] - Phone (phone) [unknown, optional] - LinkedIn URL (linkedinUrl) [unknown, optional] - Job Title (jobTitle) [unknown, optional] - Location (location) [unknown, optional] - Company Name (companyName) [unknown, optional] - Company URL (companyUrl) [unknown, optional] - Industry (industry) [KeyValue, optional]: Map your table columns to LaGrowthMachine custom attributes (customAttribute1-10). - CRM ID (crmId) [KeyValue, optional]: Map your table columns to LaGrowthMachine custom attributes (customAttribute1-10). - Custom Attributes (customAttributes) [KeyValue, optional]: Map your table columns to LaGrowthMachine custom attributes (customAttribute1-10). - Outputs: The LaGrowthMachine lead ID after create or update, plus a flag indicating whether the lead was newly created or matched against an existing one. - Add to Campaign with Lemlist (https://baseloop.io/integrations/lemlist/add-to-campaign) - API name: lemlist_add_to_campaign. Provider: Lemlist. - Summary: Add records from your table to a Lemlist campaign - Description: Adds a contact from any row in a Baseloop table to a Lemlist campaign as a new lead. Map any combination of email, phone, LinkedIn URL, and a contact owner; Lemlist handles the actual outreach. Custom fields accept `{{column}}` references for per-recipient personalization (openers, message angles, signal-based hooks). By default, Lemlist rejects leads that already exist in another campaign; flip `allowDuplicate` on to enroll the same contact twice. - Inputs: - Campaign (campaignId) [Dropdown, required]: The Campaign you want to add the record to. - Email (email) [unknown, optional]: Email address - First Name (firstName) [unknown, optional] - Last Name (lastName) [unknown, optional] - Phone Number (phoneNumber) [unknown, optional] - LinkedIn URL (linkedinUrl) [unknown, optional] - Company Name (companyName) [KeyValue, optional]: Assign a lead owner by user ID or login email. - Contact Owner (contactOwner) [KeyValue, optional]: Assign a lead owner by user ID or login email. - Custom Fields (customFields) [KeyValue, optional]: Map table columns to custom Lemlist fields. - Show Text on Multiple Lines (useHtmlLineBreaks) [Checkbox, optional]: Use this for custom fields if your text has multiple lines and you want it to appear on separate lines in Lemlist. - Allow Duplicate Leads Across Campaigns (allowDuplicate) [Checkbox, optional]: By default, if a lead already exists in another campaign, it won't allow you to add it. Switch this on to allow duplicates. - Outputs: Confirmation that the contact was added to the Lemlist campaign, plus the Lemlist lead ID. Existing leads are reported as such instead of failing. - Company Hiring Activity with LinkedIn (https://baseloop.io/integrations/linkedin/li-company-hiring-activity) - API name: li_company_hiring_activity. Provider: LinkedIn. - Summary: Find how many open jobs a company has on LinkedIn - Description: Returns the active job count, top job titles being hired for, and the most recent posting date for a company on LinkedIn, per row. Used as a buying-signal trigger for ABM and competitive plays: a target account opens roles in the buying committee, the workflow surfaces the role detail and feeds outbound the same week. Pass a column holding LinkedIn company URLs (e.g., `https://www.linkedin.com/company/google`). The action resolves the URL to a LinkedIn company ID, queries open job postings, and returns three signal columns. Filterable by location (`geoId`) and additional keyword query. Companies without a recognizable LinkedIn `/company/` URL return zero. - Inputs: - Company LinkedIn URL (companyLinkedinUrl) [ShortText, required]: Column containing the LinkedIn company URL (e.g., https://www.linkedin.com/company/google) - Additional Search Query (query) [ShortText, optional]: Additional search terms to scope results (e.g., "engineer") - Location (geoId) [Dropdown, optional]: Location to filter jobs by - Output Columns (selectedOutputFields) [StaticMultiSelectDropdown, optional]: Select hiring data to extract into separate columns. Leave empty to skip auto-extraction. - Outputs: Three signals per company: active job count, top job titles being hired for, and the most recent posting date. - Find People at Company on LinkedIn with LinkedIn (https://baseloop.io/integrations/linkedin/li-find-people-at-company) - API name: li_find_people_at_company. Provider: LinkedIn. - Summary: Find contacts at a company using LinkedIn company URL - Description: Discovers people currently working at a company on LinkedIn (Sales Navigator search scoped to one company) and lands them as new rows in a destination Contacts table with name, title, LinkedIn URL, location, headline, and tenure. Use it between company enrichment and outbound in ABM, TAM, and PLG stakeholder-mapping pipelines. Pass a column holding LinkedIn company URLs and a destination table; fields on that table are auto-created on first run. Filters cover current and past job titles, seniority, function, geography, industry, and profile language. Seniority, function, geography, and industry take numeric LinkedIn taxonomy IDs (e.g., `"300"` for VP), not labels. The action validates this before dispatch. - Inputs: - useOwnAPI (useOwnAPI) [DynamicProperties, optional]: Use your own connected LinkedIn account. - linkedInAccountIds (linkedInAccountIds) [DynamicProperties, optional] - Company LinkedIn URL (companyLinkedinUrl) [ListSelector, required]: Column containing the LinkedIn company URL (e.g., https://www.linkedin.com/company/google) - Destination Table (destinationListId) [ListSelector, required]: Select the table where found contacts will be added. Fields will be created automatically. - Max contacts per company (maxLeadsPerCompany) [Number, optional]: Maximum number of contacts to find per company. - Keywords (keywords) [LongText, optional]: Search keywords to filter contacts (e.g., name or role) - Current job titles (currentJobTitles) [Array, optional]: Current job titles of the contacts to find. Click on a selected item to toggle include/exclude. - Past job titles (pastJobTitles) [Array, optional]: Past job titles of the contacts to find. Click on a selected item to toggle include/exclude. - Seniority level (seniorityLevels) [MultiSelectDropdown, optional]: Seniority levels of the contacts to find. Click on a selected item to toggle include/exclude. - Functions (functions) [MultiSelectDropdown, optional]: Job functions of the contacts to find. Click on a selected item to toggle include/exclude. - Geography (geography) [MultiSelectDropdown, optional]: Location of the contacts to find. Click on a selected item to toggle include/exclude. - Industry (industry) [MultiSelectDropdown, optional]: Industry of the contacts to find. Click on a selected item to toggle include/exclude. - Profile Language (profileLanguage) [StaticDropdown, optional]: Filter contacts by profile language. - Outputs: A list of people currently working at the company on LinkedIn, with name, title, LinkedIn URL, location, and tenure. Filterable by seniority and department. - Import LinkedIn Profile Engagement with LinkedIn (https://baseloop.io/integrations/linkedin/li-import-profile-engagement) - API name: li_import_profile_engagement. Provider: LinkedIn. - Summary: Find leads who liked or commented on posts from a LinkedIn profile (person or company) - Description: Imports people who liked or commented on a LinkedIn profile's recent posts as new rows in your Baseloop table. Works on the profile of a person or a company. Use it for engagement mining: every commenter and reactor on a target post becomes a warm-lead candidate for outbound, with the time window configurable up to 120 days. Each engagement event becomes one row with the engager's name, headline, role, company, and LinkedIn URL. Engagement type can be scoped to likes only, comments only, or both. The action deduplicates by engagement ID across re-runs, so a recurring import keeps fresh engagers without duplicating existing rows. - Inputs: - Profile URL (profileUrl) [ShortText, required]: LinkedIn profile URL. It can be the profile of a person or a company. - Max Engagements (maxEngagements) [Number, required]: Maximum number of engagement rows to export (likes + comments). - Engagement Type (engagementType) [StaticDropdown, required]: Select which type of engagement to extract from the LinkedIn posts. - Days Since Posted (daysSincePosted) [Number, required]: Select a time frame up to 120 days. For example, entering "30" retrieves engagements from posts in the past 30 days. - Outputs: Every person who liked or commented on the LinkedIn profile's recent posts, with their name, title, company, and LinkedIn URL. Useful for warm-outbound sourcing. - Import Companies from Sales Navigator with LinkedIn (https://baseloop.io/integrations/linkedin/li-import-sales-nav-companies) - API name: li_import_sales_nav_companies. Provider: LinkedIn. - Summary: Import companies from a LinkedIn Sales Navigator company search URL into your table - Description: Imports companies matching a LinkedIn Sales Navigator company search URL into a Baseloop table, one row per company. Used as the front door for territory-based ABM lists: each saved Sales Nav search becomes its own Baseloop table feeding a downstream qualification step. Auto-creates fields for company name, LinkedIn URL, website, industry, location, HQ location, employee count, employee range, and description. Imported companies are auto-enriched with additional firmographics (website, employee count, HQ). Up to 2,500 companies per run. Optional schedule (day, week, month) re-runs the import on a recurring cadence so the table stays fresh as the Sales Nav search updates. - Inputs: - useOwnAPI (useOwnAPI) [DynamicProperties, optional]: Use your own connected LinkedIn account. - linkedInAccountId (linkedInAccountId) [DynamicProperties, optional] - Sales Navigator Company Search URL (searchUrl) [ShortText, required]: Paste your LinkedIn Sales Navigator company search URL. Build your search filters in Sales Navigator, then copy the URL. - Max Companies to Import (maxCompanies) [Number, required]: Maximum number of companies to import from the search results. - Outputs: Companies matching the Sales Navigator search URL, imported into your Baseloop table with one row per company and fields for name, domain, industry, employee count, and LinkedIn URL. - Import Contacts from Sales Navigator with LinkedIn (https://baseloop.io/integrations/linkedin/li-import-sales-nav-contacts) - API name: li_import_sales_nav_contacts. Provider: LinkedIn. - Summary: Import contacts from a LinkedIn Sales Navigator search URL into your table - Description: Imports contacts matching a LinkedIn Sales Navigator people search URL into a Baseloop table, one row per person. Used to source role-based lists at scale (XDR Leaders, Growth Ops, Heads of Marketing) and to keep dynamic lists fresh as Sales Nav results update. Auto-creates fields for full name, first name, last name, headline, location, role, LinkedIn URL, company, and company website. Up to 2,500 contacts per run. The action runs as a long-lived background job with checkpoint and resume, so an import can finish without blocking the worker. Optional schedule (day, week, month) re-runs the import on a recurring cadence. - Inputs: - useOwnAPI (useOwnAPI) [DynamicProperties, optional]: Use your own connected LinkedIn account. - linkedInAccountId (linkedInAccountId) [DynamicProperties, optional] - Sales Navigator Search URL (searchUrl) [ShortText, required]: Paste your LinkedIn Sales Navigator search URL. Build your search filters in Sales Navigator, then copy the URL. - Max Contacts to Import (maxContacts) [Number, required]: Maximum number of contacts to import from the search results. - Outputs: Contacts matching the Sales Navigator search URL, imported into your Baseloop table with one row per person and fields for name, title, company, location, and LinkedIn URL. - Job Posting Tracking with LinkedIn (https://baseloop.io/integrations/linkedin/li-job-posting-tracking) - API name: li_job_posting_tracking. Provider: LinkedIn. - Summary: Import and track job listings from LinkedIn - Description: Imports LinkedIn job postings matching a search query into a Baseloop table as new rows. Use it as a budget-signal source: a target account posts a relevant role, the workflow fans out to find the hiring manager and decision-maker, and outbound fires the same day. Also useful for staffing-vertical workflows with role-segmented job streams. Auto-creates 11 columns per posting: Job ID, Job Title, Employer, Location, Employment Type, Workplace Type, Salary, Date Posted, LinkedIn URL, Description, Applicants. Filterable by location, date posted (24h, week, month), workplace type, employment type, and experience level. Re-runs deduplicate by LinkedIn Job ID, and an optional schedule (day, week, month) keeps the table fresh. - Inputs: - Search Query (query) [ShortText, required]: Job search keywords, titles, or phrases. Include location for best results. - Location (geoId) [Dropdown, optional]: Location to filter jobs by - Max Jobs to Import (maxJobs) [Number, required]: Maximum number of job listings to import - Outputs: A live feed of new job postings matching your filters: title, company, location, posting date, and a direct link to the LinkedIn job listing. - Parallel AI Research with Parallel (https://baseloop.io/integrations/parallel/research) - API name: parallel_research. Provider: Parallel. - Summary: AI-powered web research with configurable processor tiers and structured output fields - Description: Runs typed AI research on a company or contact via Parallel.ai's research API. Use it when the workflow needs structured output (funding amount as a number, competitors as text, employee_count as a number) instead of free-text answers, or when the question is too deep for a single web-search-grounded LLM call. Output fields you define become a JSON Schema enforced by Parallel; select fields constrain the model to a fixed enum, multi-select returns an array, numbers come back typed. Processor tier (Lite, Base, Core, plus Core 2x, Pro, Ultra with your own API key) controls how much compute the research run uses. Citations and reasoning land on the cell's full value. - Inputs: - Use my own API Key (useOwnAPI) [Checkbox, optional]: Pay Parallel.ai directly instead of using Baseloop credits. - ownAuth (ownAuth) [DynamicProperties, optional]: Higher tiers use more compute for deeper research. Expensive tiers require your own API key. - Processor Tier (processor) [Dropdown, required]: Higher tiers use more compute for deeper research. Expensive tiers require your own API key. - Question (question) [LongText, required]: Your research question for Parallel AI. Use /FieldName to reference your table columns. - Output Fields (outputFields) [OutputField, required]: Define structured output fields. If empty, returns a single text answer. Add fields to get structured data (e.g., "funding_amount" as Number, "competitors" as Text). - Outputs: A structured research result populated by Parallel.ai's research agents, either a single text answer or the typed fields you defined (numbers, dates, lists), with citations. - Perplexity AI with Perplexity (https://baseloop.io/integrations/perplexity/ask-question) - API name: perplexity_ask_question. Provider: Perplexity. - Summary: Ask Perplexity AI a question with real-time web search grounding from your table data - Description: Runs a web-grounded question through Perplexity's Sonar model and writes the cited answer back to the row. Use it for "what does this company actually do," competitive landscape lookups, recent funding scans, and any question that needs a current-internet answer with a sourced citation list. The question field accepts `{{field_name}}` references to your table columns, so the same prompt re-runs per row with that row's values plugged in. Citations and usage metadata are stored on the cell's full value, available for downstream actions to render or feed forward. - Inputs: - Model (model) [StaticDropdown, required]: Your question for Perplexity AI. Use /FieldName to reference your table columns. - Question (question) [LongText, required]: Your question for Perplexity AI. Use /FieldName to reference your table columns. - System Prompt (systemPrompt) [LongText, optional]: Optional system prompt to guide the AI response style. - Outputs: A grounded answer from Perplexity with web citations, written back to the row. Citations are returned as a list so you can render them or feed them to downstream actions. - Create Contact with Reply (https://baseloop.io/integrations/reply/create-contact) - API name: reply_create_contact. Provider: Reply. - Summary: Create a contact in Reply from your table data - Description: Create Contact writes a new Reply.io contact from any row in a Baseloop table and optionally adds it to a chosen Reply sequence. Map standard fields (email, first name, last name, phone, title, company, LinkedIn URL, city, state, country, timezone) plus any pre-created Reply custom fields by name. Reply silently drops custom-field keys that do not exist in your account, so verify the names match what is configured in Reply before a campaign goes live. The action runs with 10 concurrent requests per batch and a 1-second delay between batches to stay inside Reply's rate limits, and returns the new contact ID plus a confirmation when a sequence is selected. - Inputs: - Email (email) [unknown, required]: Email address (required) - First Name (firstName) [unknown, optional] - Last Name (lastName) [unknown, optional] - Phone (phone) [unknown, optional] - Job Title (title) [unknown, optional] - Company (company) [unknown, optional] - LinkedIn Profile (linkedInProfile) [unknown, optional] - City (city) [unknown, optional] - State (state) [KeyValue, optional] - Country (country) [KeyValue, optional]: Map table columns to custom Reply fields. - Timezone ID (timeZoneId) [KeyValue, optional]: Map table columns to custom Reply fields. - Custom Fields (customFields) [KeyValue, optional]: Map table columns to custom Reply fields. - Outputs: The newly-created Reply.io contact ID, plus a confirmation that the contact was added to the chosen sequence (when one is selected). - Import Accounts with Salesforce (https://baseloop.io/integrations/salesforce/accounts-list-view-import) - API name: salesforce_accounts_list_view_import. Provider: Salesforce. - Summary: Import Accounts from a Salesforce list view into your table - Description: Import Accounts pulls every Account in a chosen Salesforce list view into a Baseloop table, one row per Account. Pick which Salesforce fields to bring in and a column is created for each automatically. The Salesforce Record ID column is always created (even if `Id` is not explicitly selected), so downstream Update or Activity steps can reference the parent record. Re-runs upsert by Salesforce `Id` so the table tracks the list view as it changes. Removing a field from the selection on edit does not delete the existing Baseloop column or its data. Uses Bulk API 2.0, so a single import handles 100,000 records without pagination limits. Free action. - Inputs: - Salesforce Accounts List View (listViewId) [Dropdown, required]: Choose an Accounts list view to import from. - Account Fields to Import (selectedFields) [MultiSelectDropdown, required]: Select which Account fields to import. Columns will be created automatically. - Outputs: Accounts imported from the chosen Salesforce list view into your Baseloop table, one row per Account, with all selected Salesforce fields mapped to columns. - Import Contacts with Salesforce (https://baseloop.io/integrations/salesforce/contacts-list-view-import) - API name: salesforce_contacts_list_view_import. Provider: Salesforce. - Summary: Import Contacts from a Salesforce list view into your table - Description: Import Contacts pulls every Contact in a chosen Salesforce list view into a Baseloop table, one row per Contact. Pick which Salesforce fields to bring in and a column is created for each automatically. The Salesforce Record ID column is always created (even if `Id` is not explicitly selected), so downstream Update or Activity steps can reference the parent record. Re-runs upsert by Salesforce `Id` so the table tracks the list view as it changes. Removing a field from the selection on edit does not delete the existing Baseloop column or its data. Uses Bulk API 2.0, so a single import handles 100,000 records without pagination limits. Free action. - Inputs: - Salesforce Contacts List View (listViewId) [Dropdown, required]: Choose a Contacts list view to import from. - Contact Fields to Import (selectedFields) [MultiSelectDropdown, required]: Select which Contact fields to import. Columns will be created automatically. - Outputs: Contacts imported from the chosen Salesforce list view into your Baseloop table, one row per Contact, with all selected Salesforce fields mapped to columns. - Create Activity with Salesforce (https://baseloop.io/integrations/salesforce/create-activity) - API name: salesforce_create_activity. Provider: Salesforce. - Summary: Create a note, task, or event in Salesforce for an Account, Contact, Lead, or Opportunity - Description: Create Activity logs a note, task, or event on an existing Salesforce Account, Contact, Lead, or Opportunity from a Baseloop row. Notes create a Lightning `ContentNote` and link it through `ContentDocumentLink`. Tasks accept subject, description, due-date, status, and priority. Events accept subject, start and end datetimes, description, and location. The action wires the activity through the right Salesforce relationship field automatically: Contact and Lead activities go through `WhoId`; Account and Opportunity activities go through `WhatId`. The row must already contain a Salesforce record ID from a Lookup Object, a list-view import, or a Create Object step. The action batches 5 records at a time to stay inside Salesforce's API rate limits, and returns the new activity ID with a deep link to the parent record. - Outputs: The newly-created Salesforce activity (note, task, or event), plus its activity ID and a deep link to the parent record. - Create Object with Salesforce (https://baseloop.io/integrations/salesforce/create-object) - API name: salesforce_create_object. Provider: Salesforce. - Summary: Push enriched table rows into Salesforce as new Accounts, Contacts, Leads, or Opportunities - Description: Create Object writes a new Salesforce record from any row in a Baseloop table. It is the final step of every "Push to Salesforce" workflow, the step that runs after enrichment, scoring, and dedupe have done their work and the row has earned a place in the CRM. The action only exposes Salesforce fields that are actually createable on the selected object type. Calculated, formula, and system-managed fields are filtered out automatically, so a misconfigured mapping fails before it hits the API. Field values are coerced to the right Salesforce types based on the live schema (a date column lands as a date, a checkbox lands as a boolean), which prevents the silent type errors that show up later as missing data in reports. An optional association block links the new record to an existing parent: Contact to Account, Opportunity to Account, Account to Parent Account. Lead records have no v1 relationship options, so the block is hidden for those. For idempotent writes, run Lookup Object first and gate Create on `isNotFound`. That way the same workflow can re-run without producing duplicate records, even on tables that get re-synced or backfilled. The action runs in batches with concurrency limits tuned for Salesforce's API budget, so a workflow can write one record or ten thousand without changing a thing. - Inputs: - Object Type (objectType) [StaticDropdown, required]: Account, Contact, Lead, or Opportunity. - Field Mapping (fieldMapping) [KeyValue, required]: Map your Baseloop columns to Salesforce fields. Only createable fields appear; calculated, formula, and system-managed fields are filtered out. - Ignore blank values (ignoreBlanks) [Checkbox, optional]: Skip empty or null values instead of writing them as blanks. Useful when a column may not be filled on every row. - Associate with another object (associateWithObject) [Checkbox, optional]: Link the new record to an existing parent (Contact to Account, Opportunity to Account, Account to Parent Account). - associationConfig (associationConfig) [DynamicProperties, optional]: Choose the relationship field and the Baseloop column holding the parent record's Salesforce ID. - Outputs: The Salesforce record ID, the full record payload (the mapped fields plus the object type), and a deep link back to the record in Salesforce. Returned to the row that triggered the action so downstream steps can reference the ID for follow-up writes (Update Object, related-object creation, status syncs). - Import Leads with Salesforce (https://baseloop.io/integrations/salesforce/leads-list-view-import) - API name: salesforce_leads_list_view_import. Provider: Salesforce. - Summary: Import Leads from a Salesforce list view into your table - Description: Import Leads pulls every Lead in a chosen Salesforce list view into a Baseloop table, one row per Lead. Pick which Salesforce fields to bring in and a column is created for each automatically. The Salesforce Record ID column is always created (even if `Id` is not explicitly selected), so downstream Update or Activity steps can reference the parent record. Re-runs upsert by Salesforce `Id` so the table tracks the list view as it changes. Removing a field from the selection on edit does not delete the existing Baseloop column or its data. Uses Bulk API 2.0, so a single import handles 100,000 records without pagination limits. Free action. - Inputs: - Salesforce Leads List View (listViewId) [Dropdown, required]: Choose a Leads list view to import from. - Lead Fields to Import (selectedFields) [MultiSelectDropdown, required]: Select which Lead fields to import. Columns will be created automatically. - Outputs: Leads imported from the chosen Salesforce list view into your Baseloop table, one row per Lead, with all selected Salesforce fields mapped to columns. - Lookup Object with Salesforce (https://baseloop.io/integrations/salesforce/lookup-object) - API name: salesforce_lookup_object. Provider: Salesforce. - Summary: Search for Accounts, Contacts, Leads, or Opportunities in Salesforce using your table data - Description: Lookup Object searches Salesforce for an existing Account, Contact, Lead, or Opportunity that matches your row data, then returns the record's `Id` and any selected fields. Filters compile to a SOQL `SELECT … WHERE … ORDER BY … LIMIT` query; supported operators are `=`, `!=`, `LIKE`, `NOTLIKE`, `>`, and `<`. Filter groups join with OR, conditions inside a group join with AND. Returns `notFound: true` when zero matches exist, so the row still succeeds and downstream branching has a clean signal to gate on. Use the `isFound` and `isNotFound` operators to route rows to Create Object (new) or Update Object (existing) without producing duplicates. Default limit is 1 result; raise it (max 100) when multiple matches are expected. - Outputs: The matching Salesforce record's ID and a deep link back to Salesforce, plus a found/not-found flag for downstream branching. - Import Opportunities with Salesforce (https://baseloop.io/integrations/salesforce/opportunities-list-view-import) - API name: salesforce_opportunities_list_view_import. Provider: Salesforce. - Summary: Import Opportunities from a Salesforce list view into your table - Description: Import Opportunities pulls every Opportunity in a chosen Salesforce list view into a Baseloop table, one row per Opportunity. Pick which Salesforce fields to bring in and a column is created for each automatically. The Salesforce Record ID column is always created (even if `Id` is not explicitly selected), so downstream Update or Activity steps can reference the parent record. Re-runs upsert by Salesforce `Id` so the table tracks the list view as it changes. Removing a field from the selection on edit does not delete the existing Baseloop column or its data. Uses Bulk API 2.0, so a single import handles 100,000 records without pagination limits. Free action. - Inputs: - Salesforce Opportunities List View (listViewId) [Dropdown, required]: Choose an Opportunities list view to import from. - Opportunity Fields to Import (selectedFields) [MultiSelectDropdown, required]: Select which Opportunity fields to import. Columns will be created automatically. - Outputs: Opportunities imported from the chosen Salesforce list view into your Baseloop table, one row per Opportunity, with all selected Salesforce fields mapped to columns. - Update Object with Salesforce (https://baseloop.io/integrations/salesforce/update-object) - API name: salesforce_update_object. Provider: Salesforce. - Summary: Update an existing Account, Contact, Lead, or Opportunity in Salesforce from your table data - Description: Update Object writes fresh data onto an existing Salesforce Account, Contact, Lead, or Opportunity, identified by its Salesforce record ID. Map your columns to Salesforce field API names; only updateable fields are listed, with calculated, formula, and system-managed fields filtered out automatically. Field values are coerced to the right Salesforce types based on the live schema. Writes go via REST PATCH against `/sobjects/{object}/{id}`. The action never creates: a missing record ID returns a clear failure rather than silently inserting. An optional association block links the updated record to a parent (Contact to Account, Opportunity to Account, Account to parent Account). Toggle ignore-blanks so empty cells skip the write instead of clearing Salesforce fields. In a Lookup-then-Create-then-Update chain, point recordIdColumn at an Effective Salesforce ID formula that merges the Lookup result and any newly-created record's ID, so Update fires on the same run for both pre-existing and freshly-created records. - Outputs: The Salesforce record updated in place, plus its record ID and a deep link back to Salesforce. - Send Message to Channel with Slack (https://baseloop.io/integrations/slack/send-message-to-channel) - API name: slack_send_message_to_channel. Provider: Slack. - Summary: Send a message to a Slack channel - Description: Posts a formatted Slack message to a channel for every row on a Baseloop table. Title, body, and bullet fields all support `{{column}}` interpolation, so each message can carry the row's name, company, links, score, or any other column value. An optional alert bar adds a colored left border for hot-lead notifications. The Slack permalink and timestamp are written back to the row for downstream actions or quick navigation from your table. - Inputs: - Channel (channel) [Dropdown, required]: Select the Slack channel to send the message to. - Title (title) [LongText, optional]: Bold title displayed at the top of the message. - Message (message) [LongText, required]: The message to send. Use /FieldName to reference your table columns. - fields (fields) [KeyValue, optional]: Additional fields to display below the message. - Enable Alert Bar (enableAlert) [Checkbox, optional]: Add a colored left border to make the message stand out. - alertSettings (alertSettings) [DynamicProperties, optional]: Hex color for the alert bar (e.g., #E01E5A for red). - Outputs: The Slack message permalink and timestamp, written back to the row so you can reference the message in downstream actions or jump to it from your table. - Add to Campaign with Smartlead (https://baseloop.io/integrations/smartlead/add-to-campaign) - API name: smartlead_add_to_campaign. Provider: Smartlead. - Summary: Add records from your table to a Smartlead campaign - Description: Adds a contact from any row in a Baseloop table to a Smartlead campaign as a new lead. Map email and custom variables to your columns; Smartlead handles the actual sending. The action chunks runs into 100-lead batches and stamps each lead with a `baseloop_id` matching the source row, so reply-handling actions can join Smartlead responses back to the table that sent them. - Inputs: - Campaign (campaignId) [Dropdown, required]: The Campaign you want to add the record to. - Email (email) [unknown, required]: Email address (required) - First Name (firstName) [KeyValue, optional] - Last Name (lastName) [KeyValue, optional]: Map table columns to custom Smartlead fields. - Company Name (companyName) [KeyValue, optional]: Map table columns to custom Smartlead fields. - Custom Fields (customFields) [KeyValue, optional]: Map table columns to custom Smartlead fields. - Allow Duplicate Leads Across Campaigns (allowDuplicate) [Checkbox, optional]: By default, if a lead already exists in another campaign, it won't allow you to add it. Switch this on to allow duplicates. - Outputs: Confirmation that the contact was added to the Smartlead campaign, plus the Smartlead lead ID and a status flag indicating whether the lead was new or already in the campaign. - Generate Personalized Video with Vidu (https://baseloop.io/integrations/vidu/generate-personalized-video) - API name: vidu_generate_personalized_video. Provider: Vidu. - Summary: Generate personalized videos, memes, or GIFs using VIDU AI from your table data - Description: Submits a video generation job to VIDU for every row, polls until the job completes, and writes the hosted view URL, video URL, and thumbnail back to the cell. Used for personalized video in top-tier outbound (every recipient gets a video referencing their company by name) and for short branded clips embedded in Lemlist or Instantly templates referencing the row's `vidu_url` column. The action takes a numeric VIDU project ID and a key/value mapping of VIDU input field names to your table columns, so the same project template renders per row with that row's values plugged in. The cell's full value carries the video URL, thumbnail URL, poster URL, and embeddable view HTML. - Inputs: - Project ID (projectId) [Number, required]: The VIDU project ID to use for generating videos. - Video Input Fields (inputFields) [KeyValue, required]: Map VIDU input fields to your table columns. Common fields: website_1_url, website_2_url - Outputs: A hosted URL to the generated personalized video, plus an embeddable thumbnail and the duration. The URL is stable and can be referenced in downstream outreach actions. ## Integrations By Category - ai-research: Parallel, Perplexity. - baseloop: Baseloop. - comms: Slack. - crm: HubSpot, Salesforce. - data: BuiltWith, LinkedIn. - other: Vidu. - sequencer: HeyReach, Instantly, LaGrowthMachine, Lemlist, Reply, Smartlead. ## Primary URLs - Homepage: https://baseloop.io/ - Pricing: https://baseloop.io/pricing - Templates index: https://baseloop.io/templates - Integrations index: https://baseloop.io/integrations - Compact LLM index: https://baseloop.io/llms.txt - Expanded LLM context: https://baseloop.io/llms-full.txt ## Policies - Privacy Policy: https://baseloop.io/privacy-policy - Cookie Policy: https://baseloop.io/cookie-policy - Terms of Service: https://baseloop.io/terms-of-service - Acceptable Use Policy: https://baseloop.io/acceptable-use-policy ## Contact And Conversion - Sign up: https://app.baseloop.io/sign-up - Demo: https://form.typeform.com/to/d09TevBo - LinkedIn: https://www.linkedin.com/company/baseloop