{"workflow":{"id":14156,"name":"Auto-publish new WordPress posts to Pinterest with PinBridge","views":56,"recentViews":2,"totalViews":56,"createdAt":"2026-03-18T12:22:38.102Z","description":"This workflow automatically turns WordPress posts into Pinterest publish jobs using PinBridge as the publishing layer.\n\nIt is designed for bloggers, publishers, affiliate sites, and content teams that already publish to WordPress and want a repeatable way to distribute that content to Pinterest without manually copying titles, descriptions, links, and images every time a post goes live.\n\nThe workflow starts by querying PinBridge for existing Pins, aggregates their titles, then fetches published WordPress posts from the WordPress REST API. From there, it filters out posts that do not have featured media and skips posts whose titles already exist in PinBridge, which gives the workflow a simple duplicate-protection layer. For posts that pass that filter, the workflow builds a publish-ready payload, validates the required fields, downloads the featured image, uploads that image through PinBridge, submits the Pinterest publish job, and returns a structured success or invalid result.\n\nThe goal is not just to publish. The goal is to publish in a way that is operationally clean, easy to review, and safer to run repeatedly.\n\n---\n\n## What problem this workflow solves\n\nA common WordPress-to-Pinterest workflow usually looks like this:\n\n- a post is published in WordPress\n- the title already exists\n- the link already exists\n- the featured image already exists\n- but Pinterest publishing still happens manually\n\nThat manual step creates several problems:\n\n- publishing is inconsistent\n- some posts are missed completely\n- metadata gets copied differently every time\n- duplicate publishing becomes easy when you rerun the process\n- scaling beyond a handful of posts becomes annoying\n\nThis workflow solves that by turning WordPress into the content source and PinBridge into the publishing layer, with n8n sitting in the middle as the orchestrator.\n\nWhen you run the workflow, it does the following:\n\n1. Lists existing Pins from PinBridge\n2. Aggregates their titles into a reference list\n3. Fetches published posts from WordPress\n4. Skips posts that do not have featured media\n5. Skips posts whose titles already exist in PinBridge\n6. Builds a Pinterest-ready payload from the post\n7. Validates that the required fields are present\n8. Downloads the featured image\n9. Uploads the image to PinBridge\n10. Submits the Pin publish job through PinBridge\n11. Returns a success or invalid result\n\nThat gives you a practical operational loop with a built-in first layer of duplicate protection.\n\n---\n\n## Why PinBridge is used here\n\nThis workflow is intentionally built around PinBridge instead of direct Pinterest API plumbing.\n\nPinBridge is the publishing layer in the middle. In this workflow:\n\n- **WordPress** is the content source\n- **n8n** is the orchestration layer\n- **PinBridge** is the publishing layer that receives the image asset and submits the Pinterest publish job\n\nThat separation keeps the workflow focused on the things n8n should be doing:\n\n- reading content from the CMS\n- filtering and validating data\n- checking whether a post appears to have already been published\n- downloading media\n- passing a clean payload into the publishing layer\n- handling the returned job submission result\n\ninstead of forcing the workflow to become a full Pinterest delivery implementation.\n\n---\n\n## What this workflow does differently from the simpler version\n\nThis updated version adds an important protection step before WordPress posts are processed:\n\n### Existing Pin title check\n\nThe workflow starts with the **List pins** node, which loads existing Pins from PinBridge.\n\nThen the **Published Titles** aggregate node collects those titles into a single list.\n\nLater, inside **Skip Posts Without Featured Media**, the workflow checks two things at once:\n\n- the WordPress post has featured media\n- the cleaned WordPress post title is **not** already present in the aggregated PinBridge title list\n\nThat means this workflow is no longer just “publish latest posts.” It is now closer to:\n\n**publish posts that have images and do not already appear to be published to Pinterest**\n\nThis is still lightweight duplicate protection, not a perfect deduplication system, but it is a meaningful improvement for a community template.\n\n---\n\n## What you need before you begin\n\nYou need five things before importing and running this workflow:\n\n1. An **n8n instance**\n2. A **WordPress site** with REST API access\n3. A **WordPress credential** in n8n\n4. A **PinBridge account**\n5. A connected **Pinterest account** and the target **board ID** you want to publish to\n\n---\n\n## Step 1: Create your PinBridge account\n\nCreate your PinBridge account first.\n\nGo to [pinbridge.io](https://www.pinbridge.io/get-started/?utm_source=n8n&utm_medium=workflow_template&utm_campaign=n8n_templates&utm_id=Auto_publish_new_wordPress_posts_to_pinterest_with_pinBridge&utm_source_platform=n8n) and register. A free account is enough to start testing the workflow.\n\nYou will need:\n\n- a **PinBridge API key**\n- the connected **Pinterest account** you want to publish to\n\nTo connect the Pinterest account inside PinBridge, go to:\n\n**App &gt; Accounts &gt; Connect &gt; Give Access**\n\nMake sure the correct Pinterest account is connected before you continue.\n\n---\n\n## Step 2: Create a PinBridge API key\n\nInside PinBridge, create an API key that will be used by the n8n workflow.\n\nTo create a new key, go to:\n\n**App &gt; API Keys &gt; Create**\n\nWhen creating the key:\n\n- give it a clear name such as `n8n-wordpress-publish`\n- store it securely\n- do not hardcode it into random HTTP nodes\n- use the PinBridge n8n credential field instead\n\nAfter the key is created, go into n8n and create the **PinBridge credential** used by the PinBridge nodes in this workflow.\n\n---\n\n## Step 2.5: Install the PinBridge n8n community node\n\nBefore this workflow can run, your n8n instance must have the PinBridge community node installed.\n\nThis workflow uses the following PinBridge nodes:\n\n- **List pins**\n- **Upload Image to PinBridge**\n- **Publish to Pinterest**\n\nIf the PinBridge node is not installed, these nodes will either be missing or show as unknown after import.\n\n### Install from the n8n UI\n\nIf your n8n instance allows community nodes:\n\n1. Open **Settings**\n2. Go to **Community Nodes**\n3. Click **Install**\n4. Enter the PinBridge package name:\n   `n8n-nodes-pinbridge`\n5. Confirm the installation\n6. Restart n8n if your environment requires it\n\nAfter installation, re-open the workflow and confirm that the PinBridge nodes load correctly.\n\n### Install in self-hosted n8n from the command line\n\nIf you manage your own n8n instance, install the package in your n8n environment:\n\n```bash\nnpm install n8n-nodes-pinbridge\n```\n\nThen restart your n8n instance.\n\nIf you are running n8n in Docker, the exact installation method depends on how your container is built. In that case, add the package to your custom image or persistent community-node setup, then restart the container.\n\n### Verify the installation\n\nAfter the node is installed, search for `PinBridge` when adding a new node in n8n.\n\nYou should see the PinBridge node available. If you do not, the installation is not complete yet, or your n8n instance has not been restarted properly.\n\n---\n\n## Step 3: Prepare your WordPress site\n\nThis workflow reads posts from the standard WordPress REST API using this pattern:\n\n`/wp-json/wp/v2/posts?status=publish&_embed=wp:featuredmedia`\n\nThat means your WordPress site must allow your n8n credential to read:\n\n- published posts\n- embedded featured media\n\nAt minimum, the workflow needs access to:\n\n- post title\n- rendered excerpt\n- permalink\n- featured image information\n\nIf your WordPress site blocks REST API access, uses a custom security layer, or has media access restrictions, make sure your n8n credential can successfully read posts before continuing.\n\n---\n\n## Step 4: Import the workflow into n8n\n\nImport the workflow JSON into your n8n instance.\n\nAfter import, open the workflow and go through the credentialed nodes.\n\nYou will need to connect:\n\n- the **WordPress credential**\n- the **PinBridge credential**\n\nDo not assume imported placeholder credential IDs will work automatically. They will not.\n\n---\n\n## Step 5: Configure the WordPress source URL\n\nOpen the **Get Latest WordPress Posts** node and update the URL if needed.\n\nThe current workflow uses a direct HTTP request to:\n\n`https://www.nomadmouse.com/wp-json/wp/v2/posts?status=publish&_embed=wp:featuredmedia`\n\nIf you are using your own site, replace that domain with your own WordPress domain.\n\nThis node is currently set up to fetch all published posts with embedded featured media data.\n\n---\n\n## Step 6: Configure the target Pinterest account and board\n\nOpen the **Publish to Pinterest** node.\n\nYou must configure:\n\n- the correct `accountId`\n- the correct `boardId`\n\nThis workflow publishes to a **single fixed board**.\n\nThat means every qualifying WordPress post will be submitted to the same Pinterest board unless you later add routing logic.\n\nThe publish node also appends UTM parameters to the post link automatically:\n\n`?utm_source=pinterest&utm_medium=social`\n\nThat is useful if you want cleaner attribution in your analytics.\n\n---\n\n## Workflow logic, node by node\n\nThis section explains exactly how the current workflow behaves.\n\n### 1. Manual Trigger\nThe workflow starts manually.\n\nThis is the right choice for a community template because it makes first-run testing easier and keeps the setup predictable.\n\nYou can later replace it with:\n\n- a schedule trigger\n- a webhook trigger\n- a cron-based polling flow\n\n### 2. List pins\nThis PinBridge node loads the existing Pins that are already known to PinBridge.\n\nThis is the first important difference from the earlier version of the template.\n\nThe workflow now begins by checking what has already been published.\n\n### 3. Published Titles\nThis aggregate node collects the titles returned by **List pins** into a single list.\n\nThat list is later used to decide whether a WordPress post should be skipped.\n\n### 4. Get Latest WordPress Posts\nThis node fetches published WordPress posts from the WordPress REST API with embedded featured media.\n\nThis is the source of content for the rest of the workflow.\n\n### 5. Skip Posts Without Featured Media\nDespite the name, this node now does two checks:\n\n- it verifies that the WordPress post has featured media with a usable source URL\n- it verifies that the cleaned WordPress post title is **not already present** in the PinBridge title list\n\nIf either of those checks fails, the post is not processed further.\n\nThis means the workflow now skips:\n\n- posts without featured images\n- posts that appear to already be published based on title matching\n\n### 6. Build Pin Payload from Post\nThis node maps WordPress fields into a Pinterest-ready payload.\n\nIt builds:\n\n- `post_id`\n- `title`\n- `description`\n- `link_url`\n- `image_url`\n- `alt_text`\n\nA practical note: the actual image used for download later comes from the embedded media path in the **Download Featured Image** node, not from the `image_url` field created here. In this workflow, `image_url` mainly exists to support validation and payload completeness.\n\n### 7. Validate Required Fields\nThis node verifies that the workflow has the minimum data needed to continue.\n\nThe required fields are:\n\n- `title`\n- `description`\n- `link_url`\n- `image_url`\n\nIf any are missing, the workflow goes to the invalid branch instead of attempting the publish process.\n\n### 8. Download Featured Image\nThis node downloads the full-size WordPress featured image as a file.\n\nThat file is what gets sent into PinBridge as the asset upload input.\n\n### 9. Upload Image to PinBridge\nThis sends the downloaded featured image into PinBridge.\n\nThis is the handoff point between WordPress media and the Pinterest publishing layer.\n\n### 10. Publish to Pinterest\nThis submits the Pin publish job using PinBridge.\n\nThe node uses:\n\n- the fixed `accountId`\n- the fixed `boardId`\n- the post title\n- the excerpt-based description\n- the canonical link with appended UTM parameters\n- the alt text\n- the dominant color field if present\n\nAt this stage, the workflow is recording successful job submission, not final downstream delivery confirmation.\n\nThat distinction matters.\n\n### 11. Build Success Result\nIf the publish request succeeds, the workflow builds a clean result object containing:\n\n- `post_id`\n- `title`\n- `link_url`\n- `job_id`\n- `status = submitted`\n- `submitted_at`\n- `error_message = ''`\n\nThis gives you a structured output you can later log, store, or notify from.\n\n### 12. Build Invalid Result\nIf required fields are missing, the workflow creates an invalid result object instead of attempting submission.\n\nThat protects the publishing path from clearly incomplete content.\n\n---\n\n## Why this workflow still stops at job submission\n\nThis is deliberate.\n\nThis template is focused on the WordPress-to-PinBridge submission phase, not the full async lifecycle.\n\nThat keeps the first version understandable and easy to run.\n\nA separate workflow should handle:\n\n- webhook verification\n- final publish confirmation\n- publish failure notifications\n- retries\n- post-submission auditing\n\nThat separation is cleaner and more realistic operationally.\n\n---\n\n## Expected first-run behavior\n\nWhen you run the workflow for the first time:\n\n- existing PinBridge titles are loaded first\n- WordPress posts with no featured image are skipped\n- WordPress posts whose titles already exist in PinBridge are skipped\n- valid new posts are converted into publish jobs\n- successful submissions return a PinBridge `job_id`\n- invalid posts return an invalid result object\n\nThis means not every WordPress post fetched from the API will go through the publish path.\n\nThat is intentional.\n\n---\n\n## How to test safely\n\nDo not start by pointing this at a very large live content set and assuming the filter is perfect.\n\nStart with a small controlled test:\n\n- one post with a featured image and a new title\n- one post with no featured image\n- one post whose title already matches an existing Pin title\n\nThen run the workflow manually.\n\nA good outcome looks like this:\n\n- the no-image post is skipped\n- the already-published-title post is skipped\n- the new post is submitted successfully and returns a `job_id`\n\nThat proves the key branches are working.\n\n---\n\n## Common setup mistakes\n\n### The WordPress domain was not replaced\nIf you import this template and leave the original WordPress URL in place, you will be reading the wrong site.\n\n### The post title match logic is too strict or too loose\nThis workflow uses title matching as a duplicate-protection shortcut.\n\nThat is useful, but not perfect.\n\nIf two unrelated posts share the same title, the newer one may be skipped.\nIf the title changes slightly, the workflow may treat it as new.\n\nThis is acceptable for a starter template, but you should know the limitation.\n\n### The board ID is wrong\nA board name is not enough. Use the real board ID expected by PinBridge.\n\n### The wrong PinBridge account ID is used\nIf the account context is wrong, the publish node may fail even though the rest of the workflow looks fine.\n\n### The post excerpt is empty\nThis workflow builds the description from the rendered WordPress excerpt. If your site does not use excerpts consistently, you may want to add a fallback from post content later.\n\n### The featured image path in the payload differs from the actual download source\nThe `Build Pin Payload from Post` node currently stores `image_url` from `_links`, while the actual download node uses `_embedded['wp:featuredmedia'][0].media_details.sizes.full.source_url`.\n\nThat works in the current flow because the download node uses the embedded media URL directly, but it is something you should be aware of if you refactor later.\n\n---\n\n## Recommended extensions after initial success\n\nOnce the base workflow is working, the best next extensions are:\n\n### Add schedule-based polling\nRun the workflow every 15 minutes, every hour, or on your editorial cadence.\n\n### Add stronger duplicate protection\nInstead of title matching only, track:\n\n- WordPress post ID\n- canonical URL\n- stored publish state in Google Sheets, Airtable, or a database\n\n### Add board routing\nMap WordPress categories or tags to different Pinterest boards.\n\n### Add final status handling\nUse a separate workflow to receive PinBridge webhook callbacks, verify signatures, and record the final publish state.\n\n### Add notifications\nSend a Slack or Telegram message after each successful submission or failure.\n\n### Add excerpt fallback logic\nIf a post has no excerpt, derive a safe short description from the rendered content.\n\n---\n\n## Minimum data contract for successful runs\n\nA post is publishable only if all of the following are true:\n\n- the post exists\n- the post has a title\n- the post has a usable excerpt-based description\n- the post has a permalink\n- the post has featured media\n- the featured image can be downloaded\n- the post title does not already appear in the existing PinBridge title list\n- the PinBridge credential is valid\n- the PinBridge account ID is correct\n- the target board ID is correct\n\nIf any of those are false, the post should not be treated as publish-ready.\n\n---\n\n## Summary\n\nThis workflow is a practical WordPress-to-Pinterest starter template with a built-in lightweight duplicate check.\n\nIt uses:\n\n- **WordPress** as the content source\n- **n8n** as the orchestration layer\n- **PinBridge** as the Pinterest publishing layer\n\nCompared to the earlier version, this one adds an important operational improvement: it checks existing PinBridge titles before attempting to publish new WordPress posts.\n\nThat makes it more useful as a real starter workflow, not just a happy-path demo.\n\nIf your WordPress site is reachable, your posts have featured images and excerpts, your PinBridge credential is configured, and your Pinterest account and board are correct, you should be able to run this workflow successfully from start to finish.\n\n---\n\n## Quick setup checklist\n\nBefore running the workflow, confirm all of the following:\n\n- PinBridge account created\n- PinBridge API key created\n- PinBridge credential added in n8n\n- PinBridge community node installed\n- WordPress credential added in n8n\n- the WordPress domain in the HTTP request node is correct\n- correct Pinterest account ID entered in the publish node\n- correct target board ID entered in the publish node\n- WordPress REST API is reachable\n- the test post has:\n  - title\n  - permalink\n  - featured image\n  - usable excerpt\n- existing PinBridge titles can be listed successfully\n\nIf all of that is true, the workflow is ready to run.\n","workflow":{"meta":{"instanceId":"6a6847ac2a077f8c4be90f29048ef6606c84d2c531025adef678c7e064dfa88a","templateCredsSetupCompleted":true},"nodes":[{"id":"c4e5be13-21a3-4801-8999-a5b04c4e7aa8","name":"Get Latest WordPress Posts","type":"n8n-nodes-base.httpRequest","position":[928,576],"parameters":{"url":"=https://www.mywordpresssite.com/wp-json/wp/v2/posts?status=publish&_embed=wp:featuredmedia","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"wordpressApi"},"credentials":{"wordpressApi":{"id":"BjywLbBsBM7Vgdvr","name":"Anna Carter Creds"}},"typeVersion":4.2},{"id":"046ba645-ed8e-429d-968f-2f6dabab655b","name":"Build Pin Payload from Post","type":"n8n-nodes-base.set","position":[1888,560],"parameters":{"options":{},"assignments":{"assignments":[{"id":"wp-post-id","name":"post_id","type":"string","value":"={{ $json.id }}"},{"id":"wp-title","name":"title","type":"string","value":"={{ $json.title.rendered.replace(/<[^>]*>/g, '').trim() }}"},{"id":"wp-description","name":"description","type":"string","value":"={{ ($json.excerpt && $json.excerpt.rendered ? $json.excerpt.rendered.replace(/<[^>]*>/g, '').trim() : '').slice(0, 450) }}"},{"id":"wp-link","name":"link_url","type":"string","value":"={{ $json.link }}"},{"id":"wp-image","name":"image_url","type":"string","value":"={{ $json._links['wp:featuredmedia'][0].href }}"},{"id":"wp-alt","name":"alt_text","type":"string","value":"={{ $json._links['wp:featuredmedia'][0].alt_text || $json.title.rendered.replace(/<[^>]*>/g, '').trim() }}"}]}},"typeVersion":3.4},{"id":"6714ee0a-89ae-4ee9-8b6e-2357c44ed602","name":"Validate Required Fields","type":"n8n-nodes-base.if","position":[2128,560],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-title","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ !!$json.title }}","rightValue":true},{"id":"has-description","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ !!$json.description }}","rightValue":true},{"id":"has-link","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ !!$json.link_url }}","rightValue":true},{"id":"has-image","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ !!$json.image_url }}","rightValue":true}]}},"typeVersion":2.2},{"id":"8ab13a76-8445-42a3-a602-027df76f5fa3","name":"Upload Image to PinBridge","type":"n8n-nodes-pinbridge.pinBridge","position":[2880,544],"parameters":{"resource":"assets"},"credentials":{"pinBridgeApi":{"id":"HICnfZ48TdazdxaF","name":"PinBridge Key Production"}},"typeVersion":1},{"id":"42ead53d-de04-4d88-bc04-1080291f5fca","name":"Publish to Pinterest","type":"n8n-nodes-pinbridge.pinBridge","position":[3120,544],"parameters":{"title":"={{ $('Build Pin Payload from Post').item.json.title }}","altText":"={{ $('Build Pin Payload from Post').item.json.alt_text }}","boardId":"1124281563167437941","linkUrl":"={{ $('Build Pin Payload from Post').item.json.link_url }}?utm_source=pinterest&utm_medium=social","accountId":"e3ebfe81-3854-4f56-a016-9e7fb4d7fcf7","description":"={{ $('Build Pin Payload from Post').item.json.description }}","dominantColor":"={{ $('Build Pin Payload from Post').item.json.dominant_color }}"},"credentials":{"pinBridgeApi":{"id":"HICnfZ48TdazdxaF","name":"PinBridge Key Production"}},"typeVersion":1},{"id":"58122451-ba1c-4575-902f-b4b717b4ea5e","name":"Build Success Result","type":"n8n-nodes-base.set","position":[3360,544],"parameters":{"options":{},"assignments":{"assignments":[{"id":"success-post-id","name":"post_id","type":"string","value":"={{ $('Build Pin Payload from Post').item.json.post_id }}"},{"id":"success-title","name":"title","type":"string","value":"={{ $('Build Pin Payload from Post').item.json.title }}"},{"id":"success-link","name":"link_url","type":"string","value":"={{ $('Build Pin Payload from Post').item.json.link_url }}"},{"id":"success-job-id","name":"job_id","type":"string","value":"={{ $json.id }}"},{"id":"success-status","name":"status","type":"string","value":"submitted"},{"id":"success-timestamp","name":"submitted_at","type":"string","value":"={{ $now }}"},{"id":"success-error","name":"error_message","type":"string","value":""}]}},"typeVersion":3.4},{"id":"a0e1e84b-821c-4ac7-b9ac-b571d4e54e6e","name":"Build Invalid Result","type":"n8n-nodes-base.code","position":[2096,1024],"parameters":{"jsCode":"return [{ json: { status: 'invalid', error_message: 'Post is missing one or more required fields: title, description, link_url, image_url', post_id: $json.post_id || '' } }];"},"typeVersion":2},{"id":"4c8987bd-ae1b-4411-88d9-f3aef5584385","name":"Download Featured Image","type":"n8n-nodes-base.httpRequest","position":[2640,544],"parameters":{"url":"={{ $('Get Latest WordPress Posts').item.json._embedded['wp:featuredmedia'][0].media_details.sizes.full.source_url }}","options":{"response":{"response":{"responseFormat":"file"}}}},"typeVersion":4.3},{"id":"fa7c50c3-819f-4e23-aa6e-ecd617ebd868","name":"List pins","type":"n8n-nodes-pinbridge.pinBridge","position":[448,576],"parameters":{"operation":"list"},"credentials":{"pinBridgeApi":{"id":"HICnfZ48TdazdxaF","name":"PinBridge Key Production"}},"typeVersion":1},{"id":"c3f82872-68df-4c11-a4f7-c930fdf46f74","name":"Published Titles","type":"n8n-nodes-base.aggregate","position":[688,576],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"title"}]}},"typeVersion":1},{"id":"1cfc59cd-f39c-45a1-8ce3-248f1564ac67","name":"Manual Trigger","type":"n8n-nodes-base.manualTrigger","position":[208,576],"parameters":{},"typeVersion":1},{"id":"56ed507b-a60a-4520-a8f5-4f8cced117ce","name":"Skip Posts Invalid Posts","type":"n8n-nodes-base.if","position":[1344,576],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-featured-media","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ !!$json._embedded && !!$json._embedded['wp:featuredmedia'] && !!$json._embedded['wp:featuredmedia'][0] && !!$json._embedded['wp:featuredmedia'][0].source_url && !$('Published Titles').first().json.title.includes($json.title.rendered.replace(/<[^>]*>/g, '').trim()) }}","rightValue":true},{"id":"37df239c-9840-4e2c-a436-2ebdbcf893d2","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"","rightValue":""}]}},"typeVersion":2.2},{"id":"f7185abb-5066-4cf7-9a1d-3326d6e996a4","name":"Sticky Note - Overview","type":"n8n-nodes-base.stickyNote","position":[176,-256],"parameters":{"color":2,"width":860,"height":448,"content":"# Publish WordPress posts to Pinterest with duplicate protection\n\nThis template uses **WordPress as the content source**, **n8n as the orchestration layer**, and **PinBridge as the publishing layer**.\n\n### How it works\n1. Load existing PinBridge pins\n2. Aggregate their titles\n3. Fetch published WordPress posts\n4. Skip posts that are **invalid**\n5. Build a Pinterest-ready payload\n6. Validate the required fields\n7. Download the featured image\n8. Upload the image to PinBridge\n9. Submit the Pinterest publish job\n10. Return a structured success or invalid result\n"},"typeVersion":1},{"id":"4d9b6869-e0ad-4a6e-b211-c82d0eb418c2","name":"Sticky Note - Setup","type":"n8n-nodes-base.stickyNote","position":[1088,-256],"parameters":{"color":2,"width":760,"height":440,"content":"## Setup checklist\n\nBefore running this workflow, replace placeholders and connect credentials:\n\n- Add a **WordPress** credential\n- Add a **PinBridge** credential\n- Replace `https://www.mywordpresssite.com`\n- Confirm the target **Pinterest account ID**\n- Confirm the target **board ID**\n- Confirm your WordPress REST API returns published posts with `_embed=wp:featuredmedia`\n\n\nThis workflow appends `?utm_source=pinterest&utm_medium=social` to the destination URL in the publish step for better analytics.\n"},"typeVersion":1},{"id":"8cf28038-8ece-4e54-9436-0c6a72a1dd6d","name":"Sticky Note - Existing pins and source posts","type":"n8n-nodes-base.stickyNote","position":[176,304],"parameters":{"color":4,"width":904,"height":448,"content":"## Build the reference set and fetch source posts\n\n`List pins` loads existing PinBridge pins.\n\n`Published Titles` aggregates existing titles into a single list that the workflow uses as a lightweight duplicate-protection layer.\n\n`Get Latest WordPress Posts` then fetches published posts with embedded featured media from the WordPress REST API.\n"},"typeVersion":1},{"id":"8d76d1fe-ebc7-4e20-96d4-092ae32410eb","name":"Sticky Note - Skip invalid posts","type":"n8n-nodes-base.stickyNote","position":[1120,304],"parameters":{"width":588,"height":448,"content":"## Skip invalid posts early\n\n`Skip Posts Invalid Posts` is the first protection layer.\n\nA post continues only when:\n- featured media exists with a usable source URL\n- the cleaned WordPress title is **not** already published by this workflow\n\nPosts that fail this check are treated as **invalid** and skipped.\n"},"typeVersion":1},{"id":"39b9567d-7b04-40d5-a103-5557900056af","name":"Sticky Note - Build and validate payload","type":"n8n-nodes-base.stickyNote","position":[1760,304],"parameters":{"color":6,"width":668,"height":456,"content":"## Build a publish-ready payload\n\n`Build Pin Payload from Post` maps WordPress data into:\n- `post_id` | `title` | `description` | `link_url` | `image_url` | `alt_text`\n\n\n`Validate Required Fields` then checks that the minimum publish fields are present before the workflow touches any external publish steps.\n"},"typeVersion":1},{"id":"0c074d13-fce2-4db0-8441-9823ac2aafb5","name":"Sticky Note - Publish path","type":"n8n-nodes-base.stickyNote","position":[2512,304],"parameters":{"color":5,"width":1048,"height":452,"content":"## Valid posts: download, upload, submit\n\nFor valid posts, the workflow:\n1. Downloads the full-size featured image\n2. Uploads the image asset to PinBridge\n3. Submits the Pinterest publish job\n4. Builds a structured success result\n"},"typeVersion":1},{"id":"0a3e6072-9786-481f-9b7f-f5f8cd5007e3","name":"Sticky Note - Invalid result branch","type":"n8n-nodes-base.stickyNote","position":[2064,816],"parameters":{"color":3,"width":540,"height":376,"content":"## Invalid result branch\n\nIf required fields are missing after payload construction, `Build Invalid Result` returns a structured object instead of attempting submission.\n\nThis keeps incomplete content away from the publishing path and makes the workflow easier to review during testing.\n"},"typeVersion":1},{"id":"13067a5d-9d30-402c-88c1-ef41a182feb1","name":"Sticky Note - Scope","type":"n8n-nodes-base.stickyNote","position":[1872,-256],"parameters":{"color":2,"width":708,"height":448,"content":"## What this template covers\n\nThis template is intentionally scoped to:\n- list existing pins\n- fetch WordPress posts\n- skip invalid or already-published posts\n- submit new publish jobs\n- return structured results\n\n\nA separate workflow should handle webhook callbacks, final publish confirmation, retries, notifications, and reporting.\n"},"typeVersion":1}],"pinData":{},"connections":{"List pins":{"main":[[{"node":"Published Titles","type":"main","index":0}]]},"Manual Trigger":{"main":[[{"node":"List pins","type":"main","index":0}]]},"Published Titles":{"main":[[{"node":"Get Latest WordPress Posts","type":"main","index":0}]]},"Publish to Pinterest":{"main":[[{"node":"Build Success Result","type":"main","index":0}]]},"Download Featured Image":{"main":[[{"node":"Upload Image to PinBridge","type":"main","index":0}]]},"Skip Posts Invalid Posts":{"main":[[{"node":"Build Pin Payload from Post","type":"main","index":0}]]},"Validate Required Fields":{"main":[[{"node":"Download Featured Image","type":"main","index":0}],[{"node":"Build Invalid Result","type":"main","index":0}]]},"Upload Image to PinBridge":{"main":[[{"node":"Publish to Pinterest","type":"main","index":0}]]},"Get Latest WordPress Posts":{"main":[[{"node":"Skip Posts Invalid Posts","type":"main","index":0}]]},"Build Pin Payload from Post":{"main":[[{"node":"Validate Required Fields","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":20,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.aggregate":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.manualTrigger":{"count":1},"n8n-nodes-pinbridge.pinBridge":{"count":3}}},"status":"published","readyToDemo":null,"user":{"name":"PinBridge","username":"pinbridge","bio":"PinBridge is a developer-first, production-focused API layer for Pinterest: queues, pacing, and operational controls.","verified":false,"links":["https://www.pinbridge.io"],"avatar":"https://gravatar.com/avatar/f2dd094f98a4ff7ed8eb3d1bea40418d6ad8cb36d0220ee595b1a01a2925ca90?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1236,"icon":"file:aggregate.svg","name":"n8n-nodes-base.aggregate","codex":{"data":{"alias":["Aggregate","Combine","Flatten","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Aggregate"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="},"displayName":"Aggregate","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":33,"name":"Social Media"}],"image":[]}}