Skip to content

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Nov 6, 2025

Resolves #18961

Summary by CodeRabbit

  • New Features

    • Added a "Generate Keyword Ideas" action for Google Ads and a new client method to request keyword ideas.
  • Chores

    • Bumped package version and updated version metadata across multiple Google Ads actions and sources.

@vercel
Copy link

vercel bot commented Nov 6, 2025

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

2 Skipped Deployments
Project Deployment Preview Comments Updated (UTC)
pipedream-docs Ignored Ignored Nov 10, 2025 4:38pm
pipedream-docs-redirect-do-not-edit Ignored Ignored Nov 10, 2025 4:38pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 6, 2025

Walkthrough

Adds a new Google Ads "Generate Keyword Ideas" action and a corresponding app client method, bumps the package version, and increments version metadata on several existing actions and sources. No other behavioral changes detected.

Changes

Cohort / File(s) Summary
New Action: Generate Keyword Ideas
components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs
New action module exporting metadata, props (including additionalFields), and an async run that parses additionalFields, calls the app client's generateKeywordIdeas, exports a success summary, and returns the API response.
App Client: new method
components/google_ads/google_ads.app.mjs
Adds generateKeywordIdeas(opts = {}) which issues a POST to /v22/customers/{customerClientId}:generateKeywordIdeas via the existing _makeRequest helper and forwards provided options.
Version bumps: actions
components/google_ads/actions/add-contact-to-list-by-email/add-contact-to-list-by-email.mjs, components/google_ads/actions/create-customer-list/create-customer-list.mjs, components/google_ads/actions/create-report/create-report.mjs, components/google_ads/actions/send-offline-conversion/send-offline-conversion.mjs
Updated exported version fields only; no logic or behavior changes.
Package and sources version bumps
components/google_ads/package.json, components/google_ads/sources/new-campaign-created/new-campaign-created.mjs, components/google_ads/sources/new-lead-form-entry/new-lead-form-entry.mjs
Package version bumped to 0.4.0; two source modules' exported version fields incremented.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Action as Generate Keyword Ideas Action
    participant App as Google Ads App Client
    participant API as Google Ads API

    User->>Action: invoke (accountId, customerClientId, additionalFields)
    Action->>Action: parse additionalFields
    Action->>App: generateKeywordIdeas({ customerClientId, data: parsedFields, ...opts })
    App->>API: POST /v22/customers/{customerClientId}:generateKeywordIdeas
    API-->>App: response (keyword ideas)
    App-->>Action: return response
    Action->>User: export summary and return response
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review focus:
    • generate-keyword-ideas action: validate props schema (especially additionalFields) and parsing/serialization before the API call.
    • google_ads.app.mjs: verify request path templating, payload structure, and that opts are correctly forwarded to _makeRequest.
    • Confirm version/package bumps are intentional and consistent.

Pre-merge checks and finishing touches

❌ Failed checks (2 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description references the linked issue #18961 but lacks the details recommended by the template (e.g., WHY section explaining the rationale). Enhance the description by completing the WHY section to explain the purpose, benefits, and context of adding this new Google Ads action to the integration.
Out of Scope Changes check ❓ Inconclusive Version bumps in multiple action files and package.json appear to be maintenance updates accompanying the new feature, though their necessity warrants clarification. Clarify whether all version bumps are necessary or if some represent unrelated changes; consider grouping version updates separately from feature implementation.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main change - adding Google Ads Generate Keyword Ideas action to support the GenerateKeywordIdeas API endpoint.
Linked Issues check ✅ Passed Changes implement the GenerateKeywordIdeas API endpoint support [#18961] by adding a new action module, app method, and version bumps across related components.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-18961

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

@michelle0927 michelle0927 marked this pull request as ready for review November 6, 2025 18:45
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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between aebf7b0 and 785a0c4.

📒 Files selected for processing (9)
  • components/google_ads/actions/add-contact-to-list-by-email/add-contact-to-list-by-email.mjs (1 hunks)
  • components/google_ads/actions/create-customer-list/create-customer-list.mjs (1 hunks)
  • components/google_ads/actions/create-report/create-report.mjs (1 hunks)
  • components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (1 hunks)
  • components/google_ads/actions/send-offline-conversion/send-offline-conversion.mjs (1 hunks)
  • components/google_ads/google_ads.app.mjs (1 hunks)
  • components/google_ads/package.json (1 hunks)
  • components/google_ads/sources/new-campaign-created/new-campaign-created.mjs (1 hunks)
  • components/google_ads/sources/new-lead-form-entry/new-lead-form-entry.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-20T01:01:02.970Z
Learnt from: js07
Repo: PipedreamHQ/pipedream PR: 18744
File: components/slack_v2/actions/send-large-message/send-large-message.mjs:49-64
Timestamp: 2025-10-20T01:01:02.970Z
Learning: In components/slack_v2/actions/send-large-message/send-large-message.mjs, the metadata_event_payload prop is typed as string, so the code only needs to handle string-to-JSON parsing and does not need to handle object inputs.

Applied to files:

  • components/google_ads/actions/send-offline-conversion/send-offline-conversion.mjs
🧬 Code graph analysis (1)
components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (1)
components/google_ads/google_ads.app.mjs (8)
  • response (20-23)
  • response (39-39)
  • response (55-58)
  • response (78-81)
  • response (123-130)
  • response (134-136)
  • response (153-157)
  • response (218-222)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Lint Code Base
🔇 Additional comments (14)
components/google_ads/actions/create-report/create-report.mjs (1)

22-22: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/package.json (1)

3-3: LGTM - Appropriate minor version bump.

The minor version increment from 0.3.3 to 0.4.0 is appropriate for adding new functionality (Generate Keyword Ideas feature) while maintaining backward compatibility.

components/google_ads/actions/send-offline-conversion/send-offline-conversion.mjs (1)

11-11: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/actions/create-customer-list/create-customer-list.mjs (1)

18-18: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/sources/new-campaign-created/new-campaign-created.mjs (1)

10-10: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/sources/new-lead-form-entry/new-lead-form-entry.mjs (1)

11-11: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/actions/add-contact-to-list-by-email/add-contact-to-list-by-email.mjs (1)

10-10: LGTM - Routine version bump.

The patch version increment is appropriate as there are no functional changes to this module.

components/google_ads/google_ads.app.mjs (2)

250-256: File exists—review comment concern is unfounded.

The action file components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs already exists in the repository at the expected location. The generateKeywordIdeas method implementation follows the established pattern correctly. No action required.

Likely an incorrect or invalid review comment.


250-256: Verify if v22 is intentional for GenerateKeywordIdeas—the endpoint is available in v21.

GenerateKeywordIdeas is available in both v21 and v22 API versions, so the v22 path used here breaks consistency with the v21 endpoints used throughout the rest of the file. Please confirm whether this is intentional or should be updated to v21 for consistency.

components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (5)

8-18: LGTM!

The action metadata is correctly configured for a read-only keyword research operation. The annotations appropriately indicate this is a non-destructive, read-only action.


19-22: LGTM!

The props structure follows the established pattern in the codebase by using shared common props and dynamically generated additional fields.


33-34: LGTM!

The success message and response handling are appropriate for this action.


6-6: No issues found—API version is correct.

The v22 API reference in the docLink is intentional. The generateKeywordIdeas method in google_ads.app.mjs uses the v22 endpoint (/v22/customers/{customerClientId}:generateKeywordIdeas), while all other methods use v21. This version difference appears deliberate, suggesting this endpoint is a newer feature only available in v22.


25-32: Method verification complete — no issues found.

The generateKeywordIdeas method is properly implemented in components/google_ads/google_ads.app.mjs at line 250. It correctly passes all parameters through _makeRequest, which properly handles path substitution, header construction, and axios invocation. The method signature and parameter chain align correctly with the action's call site.

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: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 785a0c4 and bf93b65.

📒 Files selected for processing (1)
  • components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
  • GitHub Check: Lint Code Base
🔇 Additional comments (4)
components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (4)

1-6: LGTM!

The imports and documentation link are correctly configured for this action.


8-18: LGTM!

The action metadata and annotations are correctly configured. The readOnlyHint: true and destructiveHint: false accurately reflect that this is a read-only operation for generating keyword ideas.


24-24: Note: Double parsing previously flagged.

The double parsing pattern on this line was already addressed in a previous review comment. Please refer to that comment for guidance on simplifying this if both parsing steps are not necessary.


33-34: LGTM!

The success message is clear and the response return is appropriate.

GTFalcao
GTFalcao previously approved these changes Nov 6, 2025
Copy link
Collaborator

@GTFalcao GTFalcao left a comment

Choose a reason for hiding this comment

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

LGTM!

@vunguyenhung
Copy link
Collaborator

Hello everyone, I have tested this PR and there're some test cases failed or needed improvement.

Please check test reports below for more information:

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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bf93b65 and d81c6fb.

📒 Files selected for processing (1)
  • components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-07-01T17:07:48.193Z
Learnt from: js07
Repo: PipedreamHQ/pipedream PR: 17375
File: components/zerobounce/actions/get-validation-results-file/get-validation-results-file.mjs:23-27
Timestamp: 2025-07-01T17:07:48.193Z
Learning: For "dir" props in Pipedream components, whether to mark them as optional depends on the action's file I/O behavior - if an action always writes files as output, the "dir" prop should not be marked as optional.

Applied to files:

  • components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs
📚 Learning: 2025-09-15T22:01:17.593Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 18362
File: components/leonardo_ai/README.md:45-49
Timestamp: 2025-09-15T22:01:17.593Z
Learning: In Leonardo AI components (and likely other Pipedream components), prefer using info alert props on the component itself rather than detailed "Key Features" sections in README files for action documentation.

Applied to files:

  • components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Publish TypeScript components
  • GitHub Check: pnpm publish
🔇 Additional comments (3)
components/google_ads/actions/generate-keyword-ideas/generate-keyword-ideas.mjs (3)

1-7: LGTM!

The imports and API documentation link are appropriate for this action.


8-18: LGTM!

The action metadata and annotations are correctly configured for a read-only external API call.


42-54: The review comment's API requirement statement is incomplete and the proposed validation is insufficient.

The Google Ads generateKeywordIdeas API requires exactly one seed union on GenerateKeywordIdeasRequest: one of keywordSeed, urlSeed, keywordAndUrlSeed, or siteSeed.

The review comment omits keywordAndUrlSeed from the required fields list and incorrectly states "at least one" instead of "exactly one." Additionally, the proposed validation is incomplete—it doesn't:

  • Include keywordAndUrlSeed as a valid seed option
  • Enforce that only one seed type is provided (the union constraint)
  • Validate required nested fields within each seed type (e.g., keywordSeed.keywords must contain 1–20 keywords, or urlSeed.url must be a single URL string)

If validation is needed, it should match the actual API contract. However, consider whether validation belongs here or should be delegated to the Google Ads client library layer.

Likely an incorrect or invalid review comment.

@vunguyenhung
Copy link
Collaborator

Hi everyone, all test cases are passed! Ready for release!

Test reports

@michelle0927
Copy link
Collaborator Author

/approve

@GTFalcao GTFalcao merged commit 38b54ae into master Nov 11, 2025
10 checks passed
@GTFalcao GTFalcao deleted the issue-18961 branch November 11, 2025 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ACTION] Google Ads Generate Keyword Ideas

4 participants