Skip to content

Conversation

benemohamed
Copy link

@benemohamed benemohamed commented Oct 16, 2025

new Actions

  • Author Finder - Find email from blog post URLs
  • Email Finder - Generate email from domain + name
  • LinkedIn Finder - Find email from LinkedIn profile
  • Email Verifier - Verify email deliverability
  • Email Enrichment - Get person/company data from email
  • Email Sources - Find where email appears online
  • Domain Search - Find all emails for a domain (with filters)
  • Domain Status - Check if domain is webmail/disposable
  • Email Count - Get total emails for domain
  • Email Format - Get domain email patterns
  • Location - Get employee locations by domain
  • Technology - Analyze domain tech stack
  • Similar Domains - Find competitor domains
  • Domain Suggestions - Get related domains
  • Phone Finder - Find phones by email/domain/LinkedIn
  • Phone Validator - Validate phone numbers
  • Autocomplete - Company search with logos
  • Get Account - Account info and statistics
  • Get Usage - API usage tracking
  • Get Logs - Request history
  • Get Status - API health monitoring

WHY

providing email finder, verification, and enrichment capabilities to Pipedream users.

Summary by CodeRabbit

  • New Features

    • Added 20+ Tomba actions for email & phone discovery, verification, enrichment, domain research, LinkedIn lookups, company search, technology detection, usage/logs and account info — enabling broader contact and domain workflows.
    • Expanded Tomba integration capabilities and improved end-to-end lookups and summaries.
  • Documentation

    • Expanded README with Getting Started, detailed use cases, step-by-step setup, and Troubleshooting (authentication, rate limits, no results).

- Implemented actions for author finding, domain searching, domain status checking, domain suggestions, email counting, email enrichment, email finding, email formatting, email sourcing, email verifying, account retrieval, log fetching, and usage statistics.
- Added phone finder and validator actions.
- Introduced company search functionality with natural language queries.
- Included technology stack retrieval and similar domain suggestions.
- Updated package.json with new dependencies and improved descriptions.
- Enhanced app prop definitions for better user experience.
Copy link

vercel bot commented Oct 16, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
pipedream-docs-redirect-do-not-edit Ignored Ignored Oct 16, 2025 5:40pm

@adolfo-pd adolfo-pd added the User submitted Submitted by a user label Oct 16, 2025
@pipedream-component-development
Copy link
Collaborator

Thank you so much for submitting this! We've added it to our backlog to review, and our team has been notified.

@pipedream-component-development
Copy link
Collaborator

Thanks for submitting this PR! When we review PRs, we follow the Pipedream component guidelines. If you're not familiar, here's a quick checklist:

Copy link
Contributor

coderabbitai bot commented Oct 16, 2025

Walkthrough

This PR adds ~24 new Tomba action modules, expands the tomba.app.mjs with comprehensive propDefinitions, request helpers, and ~21 new API operation methods, updates package metadata (version, deps, keywords), and rewrites the component README with expanded usage and troubleshooting guidance.

Changes

Cohort / File(s) Summary
Documentation
components/tomba/README.md
Rewrites and expands the README: broader Overview, new and detailed use cases (Lead Generation Automation, Domain Research, Competitive Intelligence), Getting Started guide, and Troubleshooting (Authentication Issues, Rate Limiting, No Results, Invalid Emails).
Email & Domain Actions
components/tomba/actions/email-finder/email-finder.mjs, components/tomba/actions/email-enrichment/email-enrichment.mjs, components/tomba/actions/email-verifier/email-verifier.mjs, components/tomba/actions/email-count/email-count.mjs, components/tomba/actions/email-format/email-format.mjs, components/tomba/actions/email-sources/email-sources.mjs, components/tomba/actions/domain-search/domain-search.mjs, components/tomba/actions/domain-status/domain-status.mjs, components/tomba/actions/domain-suggestions/domain-suggestions.mjs, components/tomba/actions/location/location.mjs, components/tomba/actions/technology/technology.mjs, components/tomba/actions/similar/similar.mjs
Adds 12 read-only action modules that import the app, declare props via propDefinitions, call the corresponding app method in run(), export a $summary, and return the API response.
Contact & Author Discovery Actions
components/tomba/actions/author-finder/author-finder.mjs, components/tomba/actions/linkedin-finder/linkedin-finder.mjs, components/tomba/actions/phone-finder/phone-finder.mjs, components/tomba/actions/phone-validator/phone-validator.mjs
Adds 4 actions for author/contact discovery and phone validation; Phone Finder includes dynamic additionalProps for multiple search types; all delegate to app methods and export summaries.
Account, Usage & Logs Actions
components/tomba/actions/get-account/get-account.mjs, components/tomba/actions/get-usage/get-usage.mjs, components/tomba/actions/get-logs/get-logs.mjs
Adds 3 actions for account info, usage, and paginated logs; each calls the app, exports a summary, and returns the response.
Company Search Action
components/tomba/actions/search-companies/search-companies.mjs
Adds Search Companies action supporting query, filters, limit, and page; delegates to app.searchCompanies and exports a summary.
App Module
components/tomba/tomba.app.mjs
Substantially expands the app: adds a full propDefinitions object (many input fields), helper methods (_baseUrl, _headers, _makeRequest), and ~21 API methods (authorFinder, domainSearch, domainStatus, emailCount, emailEnrichment, emailFinder, emailFormat, emailSources, emailVerifier, linkedinFinder, location, phoneFinder, phoneValidator, similar, technology, getAccount, searchCompanies, domainSuggestions, getUsage, getLogs).
Package Metadata
components/tomba/package.json
Bumps version 0.0.5 → 0.2.0, expands description, adds keywords (email, finder, verifier, enrichment, domain, phone, linkedin, company, search), and adds dependency @pipedream/platform ^3.0.3.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Action
    participant App
    participant API

    User->>Action: Invoke action with params
    Action->>App: this.app.<operation>({ $, ...params })
    App->>App: Build headers & path via _headers/_baseUrl
    App->>API: _makeRequest -> HTTP call
    API-->>App: Return response
    App-->>Action: Return response payload
    Action->>Action: $.export("$summary", "...") 
    Action-->>User: Return response
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Poem

🐇 I hopped through code, a curious spree,

New finders, verifiers, and logs for me.
APIs connected, props set just right,
Summaries glowing in soft twilight.
A warren of endpoints — oh what a sight! ✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title succinctly describes the main change by stating that new Tomba email, domain, and phone actions are being added, which directly reflects the extensive set of new action modules introduced in this PR. It is clear and specific without including extraneous details. A teammate scanning the history can immediately grasp the primary purpose of the changeset.
Description Check ✅ Passed The pull request description includes the required “## WHY” section with a clear rationale and also lists all new actions added, providing comprehensive context about the scope of the updates. It adheres to the repository’s minimal template by completing the mandatory WHY section and supplements it with useful detail. All required information is present and the description is focused and relevant.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6fd422f and a6f3786.

📒 Files selected for processing (2)
  • components/tomba/actions/get-logs/get-logs.mjs (1 hunks)
  • components/tomba/actions/phone-finder/phone-finder.mjs (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • components/tomba/actions/phone-finder/phone-finder.mjs
  • components/tomba/actions/get-logs/get-logs.mjs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
components/tomba/actions/phone-finder/phone-finder.mjs (1)

62-76: LGTM! Consider making parameter passing more explicit.

The implementation works correctly. The phoneFinder method receives all three parameters (domain, email, linkedinUrl), with only the relevant one populated based on searchType. While functional, you could optionally make this more explicit by conditionally building the parameters object.

Optional refactor to be more explicit about which parameter is passed:

 async run({ $ }) {
+  const params = { $ };
+  if (this.searchType === "domain") {
+    params.domain = this.domain;
+  } else if (this.searchType === "email") {
+    params.email = this.email;
+  } else if (this.searchType === "linkedin") {
+    params.linkedinUrl = this.linkedinUrl;
+  }
+  
-  const response = await this.app.phoneFinder({
-    $,
-    domain: this.domain,
-    email: this.email,
-    linkedinUrl: this.linkedinUrl,
-  });
+  const response = await this.app.phoneFinder(params);

   const searchValue = this.domain || this.email || this.linkedinUrl;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6d19333 and 6fd422f.

📒 Files selected for processing (23)
  • components/tomba/README.md (1 hunks)
  • components/tomba/actions/author-finder/author-finder.mjs (1 hunks)
  • components/tomba/actions/domain-search/domain-search.mjs (1 hunks)
  • components/tomba/actions/domain-status/domain-status.mjs (1 hunks)
  • components/tomba/actions/domain-suggestions/domain-suggestions.mjs (1 hunks)
  • components/tomba/actions/email-count/email-count.mjs (1 hunks)
  • components/tomba/actions/email-enrichment/email-enrichment.mjs (1 hunks)
  • components/tomba/actions/email-finder/email-finder.mjs (1 hunks)
  • components/tomba/actions/email-format/email-format.mjs (1 hunks)
  • components/tomba/actions/email-sources/email-sources.mjs (1 hunks)
  • components/tomba/actions/email-verifier/email-verifier.mjs (1 hunks)
  • components/tomba/actions/get-account/get-account.mjs (1 hunks)
  • components/tomba/actions/get-logs/get-logs.mjs (1 hunks)
  • components/tomba/actions/get-usage/get-usage.mjs (1 hunks)
  • components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1 hunks)
  • components/tomba/actions/location/location.mjs (1 hunks)
  • components/tomba/actions/phone-finder/phone-finder.mjs (1 hunks)
  • components/tomba/actions/phone-validator/phone-validator.mjs (1 hunks)
  • components/tomba/actions/search-companies/search-companies.mjs (1 hunks)
  • components/tomba/actions/similar/similar.mjs (1 hunks)
  • components/tomba/actions/technology/technology.mjs (1 hunks)
  • components/tomba/package.json (1 hunks)
  • components/tomba/tomba.app.mjs (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (18)
components/tomba/actions/email-sources/email-sources.mjs (3)
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
  • response (25-28)
components/tomba/actions/email-finder/email-finder.mjs (1)
  • response (37-42)
components/tomba/actions/email-verifier/email-verifier.mjs (1)
  • response (25-28)
components/tomba/actions/phone-finder/phone-finder.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/email-finder/email-finder.mjs (1)
  • response (37-42)
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
  • response (25-28)
components/tomba/actions/search-companies/search-companies.mjs (2)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/domain-suggestions/domain-suggestions.mjs (1)
  • response (26-29)
components/tomba/actions/technology/technology.mjs (4)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/email-format/email-format.mjs (1)
  • response (25-28)
components/tomba/actions/location/location.mjs (1)
  • response (25-28)
components/tomba/actions/author-finder/author-finder.mjs (1)
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
  • response (25-28)
components/tomba/actions/domain-status/domain-status.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/location/location.mjs (1)
  • response (25-28)
components/tomba/actions/get-logs/get-logs.mjs (1)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/email-format/email-format.mjs (3)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/email-finder/email-finder.mjs (1)
  • response (37-42)
components/tomba/actions/similar/similar.mjs (5)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/email-format/email-format.mjs (1)
  • response (25-28)
components/tomba/actions/location/location.mjs (1)
  • response (25-28)
components/tomba/actions/domain-suggestions/domain-suggestions.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/get-account/get-account.mjs (1)
  • response (19-21)
components/tomba/actions/email-verifier/email-verifier.mjs (2)
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
  • response (25-28)
components/tomba/actions/email-sources/email-sources.mjs (1)
  • response (25-28)
components/tomba/actions/get-account/get-account.mjs (1)
components/tomba/actions/get-usage/get-usage.mjs (1)
  • response (19-21)
components/tomba/actions/location/location.mjs (3)
components/tomba/actions/domain-search/domain-search.mjs (1)
  • response (49-56)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/get-usage/get-usage.mjs (1)
components/tomba/actions/get-account/get-account.mjs (1)
  • response (19-21)
components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)
components/tomba/actions/phone-finder/phone-finder.mjs (1)
  • response (63-68)
components/tomba/actions/email-finder/email-finder.mjs (4)
components/tomba/actions/email-count/email-count.mjs (1)
  • response (25-28)
components/tomba/actions/email-enrichment/email-enrichment.mjs (1)
  • response (25-28)
components/tomba/actions/email-verifier/email-verifier.mjs (1)
  • response (25-28)
components/tomba/actions/phone-finder/phone-finder.mjs (1)
  • response (63-68)
components/tomba/actions/email-enrichment/email-enrichment.mjs (2)
components/tomba/actions/email-sources/email-sources.mjs (1)
  • response (25-28)
components/tomba/actions/email-verifier/email-verifier.mjs (1)
  • response (25-28)
components/tomba/actions/email-count/email-count.mjs (3)
components/tomba/actions/domain-status/domain-status.mjs (1)
  • response (25-28)
components/tomba/actions/email-format/email-format.mjs (1)
  • response (25-28)
components/tomba/actions/location/location.mjs (1)
  • response (25-28)
🔇 Additional comments (17)
components/tomba/README.md (1)

3-50: Expanded README clearly communicates the new action surface

The updated overview, use cases, onboarding steps, and troubleshooting guidance align well with the broadened Tomba integration and give users a clear path to success. Nicely done.

components/tomba/package.json (1)

1-27: LGTM! Package metadata appropriately updated.

The version bump to 0.2.0, expanded description, comprehensive keywords, and addition of the @pipedream/platform dependency are all appropriate for this feature expansion.

components/tomba/actions/technology/technology.mjs (1)

1-36: LGTM! Clean action implementation.

The action follows Pipedream conventions with proper metadata, propDefinitions, and a clear summary message. The structure is consistent with other actions in this PR.

components/tomba/actions/email-verifier/email-verifier.mjs (1)

1-33: LGTM! Consistent action implementation.

The email verification action follows the established pattern and correctly uses propDefinitions from the app module.

components/tomba/actions/linkedin-finder/linkedin-finder.mjs (1)

1-36: LGTM! Well-structured LinkedIn finder action.

The implementation correctly follows Pipedream conventions and maintains consistency with other actions in this PR.

components/tomba/actions/phone-validator/phone-validator.mjs (1)

1-43: LGTM! Phone validator action properly implemented.

The action correctly handles multiple parameters (phoneNumber and country) and follows the established pattern across all Tomba actions.

components/tomba/actions/email-count/email-count.mjs (1)

1-36: LGTM! Consistent domain-based action.

The email count action follows the same reliable pattern as other domain-based actions in this PR (technology, location, domain-status, email-format).

components/tomba/actions/location/location.mjs (1)

1-36: LGTM! Location action properly structured.

The implementation is consistent with other domain-based actions and correctly retrieves employee location data for a given domain.

components/tomba/actions/domain-search/domain-search.mjs (2)

60-62: Excellent use of optional chaining for defensive coding.

The defensive use of optional chaining (response.data?.emails?.length || 0) prevents potential runtime errors if the API response structure varies. This pattern could be beneficial in other actions' summaries that display dynamic data.


48-66: No changes needed for optional props. page, country, department, and limitDomainSearch are all marked optional: true in the app’s prop definitions.

components/tomba/actions/phone-finder/phone-finder.mjs (1)

39-61: LGTM! Clean dynamic prop implementation.

The additionalProps() method correctly exposes the appropriate input field based on the selected search type.

components/tomba/actions/get-account/get-account.mjs (1)

3-26: LGTM!

Clean implementation following the standard action pattern.

components/tomba/actions/email-sources/email-sources.mjs (1)

3-33: LGTM!

Clean implementation with proper use of propDefinitions.

components/tomba/actions/email-enrichment/email-enrichment.mjs (1)

3-33: LGTM!

Clean implementation following the established pattern.

components/tomba/actions/get-usage/get-usage.mjs (1)

3-26: LGTM!

Clean implementation following the standard action pattern.

components/tomba/actions/email-format/email-format.mjs (1)

3-36: LGTM!

Clean implementation following the established pattern.

components/tomba/actions/search-companies/search-companies.mjs (1)

3-59: LGTM!

Clean implementation with proper use of multiple propDefinitions.

Comment on lines 30 to 35
async run({ $ }) {
const response = await this.app.getLogs({
$,
limit: this.limit,
offset: this.offset,
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix undefined variable reference.

Line 34 references this.offset, which is not defined in the props. This will result in undefined being passed to the API.

Apply this diff to calculate the offset from page and limit:

 async run({ $ }) {
+  const offset = (this.page - 1) * this.limit;
+  
   const response = await this.app.getLogs({
     $,
     limit: this.limit,
-    offset: this.offset,
+    offset,
   });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
async run({ $ }) {
const response = await this.app.getLogs({
$,
limit: this.limit,
offset: this.offset,
});
async run({ $ }) {
const offset = (this.page - 1) * this.limit;
const response = await this.app.getLogs({
$,
limit: this.limit,
offset,
});
🤖 Prompt for AI Agents
In components/tomba/actions/get-logs/get-logs.mjs around lines 30 to 35, the
code passes this.offset which is not a defined prop; compute offset from the
page and limit props and pass that instead — e.g., derive page = this.page || 1,
compute offset = (page - 1) * this.limit, and use that computed offset in the
call to this.app.getLogs so undefined is never sent to the API.

@benemohamed benemohamed changed the title Update tomba, news actions Add new Tomba email, domain and phone actions Oct 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

User submitted Submitted by a user

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants