<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Workflow Field Guides</title>
    <description>The latest articles on DEV Community by Workflow Field Guides (@workflowguides).</description>
    <link>https://dev.to/workflowguides</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4151307%2F4084df40-ed65-4d75-a682-1d59dbd7dd9b.png</url>
      <title>DEV Community: Workflow Field Guides</title>
      <link>https://dev.to/workflowguides</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/workflowguides"/>
    <language>en</language>
    <item>
      <title>Stop Publishing “Here Is Your Caption”: Validate Gemini Output in Make</title>
      <dc:creator>Workflow Field Guides</dc:creator>
      <pubDate>Wed, 30 Sep 2026 13:31:27 +0000</pubDate>
      <link>https://dev.to/workflowguides/stop-publishing-here-is-your-caption-validate-gemini-output-in-make-1j3h</link>
      <guid>https://dev.to/workflowguides/stop-publishing-here-is-your-caption-validate-gemini-output-in-make-1j3h</guid>
      <description>&lt;p&gt;You ask Gemini to adapt one Airtable draft for Instagram, Pinterest, and Threads. Most runs look fine. Then a platform gets this as its caption:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here is an engaging Instagram caption for your brand:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or a blank string. Or a plausible sentence with an invented discount. A scheduled workflow can publish all three without anyone seeing the problem first.&lt;/p&gt;

&lt;p&gt;The fix is a small contract between the AI step and the publishing step: &lt;strong&gt;request structured fields, parse them, then check them before posting&lt;/strong&gt;. This is a separate issue from duplicate prevention; each platform can publish exactly once and still publish bad copy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a narrow output shape
&lt;/h2&gt;

&lt;p&gt;For one destination, request a JSON object like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"caption"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A complete, ready-to-publish caption"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A call to action supported by the source draft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"needs_review"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"review_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make caption, cta, needs_review, and review_reason required in the schema. Use a separate request or schema per platform if their fields differ. For Pinterest, you might use title and description; for Instagram, caption may be enough. Avoid one giant object with many optional fields that every later module must guess how to use.&lt;/p&gt;

&lt;p&gt;Google's Gemini API supports &lt;a href="https://ai.google.dev/gemini-api/docs/structured-output" rel="noopener noreferrer"&gt;structured output with a JSON schema&lt;/a&gt;. The exact setting depends on the API or Make module you use. If that module exposes a response format or schema control, use it. If it does not, a prompt asking for JSON is only an instruction to the model, &lt;strong&gt;not&lt;/strong&gt; a format guarantee; parse and reject bad results before the publish module. Google documents a supported subset of JSON Schema, so keep the schema simple and test it against the model you select.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tell the model what it may use
&lt;/h2&gt;

&lt;p&gt;An example instruction for the Instagram step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You write an Instagram caption from the source fields below.
Return only the fields in the configured JSON schema.
Use only facts, prices, offers, links, and product claims present in the source.
Do not invent a discount, testimonial, deadline, or result.
If the source lacks a fact needed for a safe caption, set needs_review to true,
explain the missing fact in review_reason, and keep the caption empty.
Do not add an introduction such as "Here is your caption".

Title: [map Airtable Title]
Source draft: [map Airtable Caption]
Approved CTA: [map Airtable CTA]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Map fields with Make's mapping controls; do not paste actual account keys or private customer details into a reusable prompt. An empty caption is acceptable &lt;strong&gt;only&lt;/strong&gt; when the scenario routes it to review instead of publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put checks between Gemini and the social module
&lt;/h2&gt;

&lt;p&gt;In Make, parse the Gemini response as JSON, or use the module's structured fields when it returns them directly. Define the expected &lt;a href="https://help.make.com/data-structures" rel="noopener noreferrer"&gt;Make data structure&lt;/a&gt; so downstream mapping is explicit. Then use a filter before the publishing module:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;needs_review must be false.&lt;/li&gt;
&lt;li&gt;caption must be nonempty after trimming whitespace.&lt;/li&gt;
&lt;li&gt;The text must fit the destination's current limits, which you should verify in that destination's own module or documentation.&lt;/li&gt;
&lt;li&gt;Required source facts or approved link must still be present if your workflow depends on them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Route anything else to a review queue in Airtable. Save the generated text and a reason such as empty caption, invalid JSON, over length, or unverified claim. Do not use a Skip handler as your sole quality control: dropping a failed bundle does not explain what needs editing.&lt;/p&gt;

&lt;p&gt;For a higher-risk claim, add human approval even when the JSON parses. A schema can constrain shape; it cannot prove that a discount exists, a health claim is accurate, or a link points to the intended product. This is a business rule, not a parsing rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test deliberately bad inputs
&lt;/h2&gt;

&lt;p&gt;Create three test Airtable records before scheduling:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source draft&lt;/th&gt;
&lt;th&gt;Expected behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clear product facts and an approved CTA&lt;/td&gt;
&lt;td&gt;Valid caption reaches the test publishing step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing offer details but asks for a discount&lt;/td&gt;
&lt;td&gt;needs_review or a failed business-rule check; no publish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty draft or malformed AI response&lt;/td&gt;
&lt;td&gt;Review queue receives a reason; no publish&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Inspect the actual Make bundles after Run once. Check the parsed field mapped into the social module, not just the AI module's raw response. The best evidence is a test post on a controlled account and a corresponding Airtable result.&lt;/p&gt;

&lt;p&gt;The goal is modest but important: an AI caption should have to pass a visible gate before the social API sees it. That gate does not make the writing perfect. It makes broken or unsupported output easier to catch and fix.&lt;/p&gt;

&lt;p&gt;I also made &lt;a href="https://whop.com/workflow-field-guides/small-budget-big-results-smm-automation-guide/" rel="noopener noreferrer"&gt;Small Budget, Big Results: SMM Automation Guide&lt;/a&gt;, a $15 guide with a 15-page PDF, an edited Make blueprint, and a setup checklist. It covers the broader Airtable → Make → Gemini workflow. The blueprint is a setup-required example: connect your own accounts, map fields, add your validation and retry rules, and test before scheduling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Further reading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/structured-output" rel="noopener noreferrer"&gt;Gemini API: Structured outputs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.make.com/data-structures" rel="noopener noreferrer"&gt;Make: Data structures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How to Prevent Duplicate Social Posts in an Airtable Make Workflow</title>
      <dc:creator>Workflow Field Guides</dc:creator>
      <pubDate>Wed, 30 Sep 2026 13:08:16 +0000</pubDate>
      <link>https://dev.to/workflowguides/how-to-prevent-duplicate-social-posts-in-an-airtable-make-workflow-hpd</link>
      <guid>https://dev.to/workflowguides/how-to-prevent-duplicate-social-posts-in-an-airtable-make-workflow-hpd</guid>
      <description>&lt;p&gt;&lt;em&gt;A practical pattern for scheduled content with retries and partial failures.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You schedule a post in Airtable. Make finds it, publishes it to Instagram and Pinterest, and then updates the record. It works—until Pinterest fails after Instagram succeeds. On the next run, the same Airtable record is still eligible. If the scenario starts from the beginning, Instagram gets a duplicate.&lt;/p&gt;

&lt;p&gt;The fix is to track the &lt;strong&gt;record's overall state&lt;/strong&gt; and &lt;strong&gt;each destination's state&lt;/strong&gt; separately. You also need to decide what happens when publishing succeeds but the status update fails. No simple filter can make a social platform and Airtable update atomically.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Set up the Airtable fields
&lt;/h2&gt;

&lt;p&gt;In a &lt;code&gt;Posts&lt;/code&gt; table, use these fields (adapt the names to your base):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single line text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Three ways to simplify scheduling&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Caption&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Long text&lt;/td&gt;
&lt;td&gt;Source copy for the post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Publish Date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date with time&lt;/td&gt;
&lt;td&gt;A scheduled date and time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Image URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;A publicly accessible image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single select&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ready&lt;/code&gt;, &lt;code&gt;Processing&lt;/code&gt;, &lt;code&gt;Needs Review&lt;/code&gt;, &lt;code&gt;Published&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Instagram Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single select&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Pending&lt;/code&gt;, &lt;code&gt;Published&lt;/code&gt;, &lt;code&gt;Failed&lt;/code&gt;, &lt;code&gt;Uncertain&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pinterest Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single select&lt;/td&gt;
&lt;td&gt;The same choices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Threads Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single select&lt;/td&gt;
&lt;td&gt;The same choices, if used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Instagram Post ID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single line text&lt;/td&gt;
&lt;td&gt;ID returned by the publisher, if available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Pinterest Pin ID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single line text&lt;/td&gt;
&lt;td&gt;ID returned by the publisher, if available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Only add columns for platforms you actually use. Keep the platform post IDs or URLs when the publishing modules return them. They are useful when a timeout leaves the result uncertain.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Search for posts that are due
&lt;/h2&gt;

&lt;p&gt;In Make, start with &lt;strong&gt;Airtable → Search Records&lt;/strong&gt;. Use this Airtable formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AND(
  {Status} = "Ready",
  {Publish Date},
  {Publish Date} &amp;lt;= NOW()
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sort by &lt;code&gt;Publish Date&lt;/code&gt; ascending and start with a limit of one record per scheduled run. Set the Airtable field to include time, and check the base, field, and scenario time zones with a test record near midnight.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TODAY()&lt;/code&gt; is the wrong boundary for a timed schedule: it provides the date, not the current time. &lt;code&gt;NOW()&lt;/code&gt; includes time, but Airtable does &lt;strong&gt;not&lt;/strong&gt; guarantee a real-time refresh; its documented recalculation cadence can delay eligibility. If you need precise minute-level delivery, use a scheduling mechanism designed for that precision and test its behavior. See &lt;a href="https://support.airtable.com/articles/7330071120-airtable-formula-field-functions-reference" rel="noopener noreferrer"&gt;Airtable's date-function reference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a simpler existing base with an &lt;code&gt;Is Published&lt;/code&gt; checkbox, &lt;code&gt;AND({Is Published} = 0, {Publish Date} &amp;lt;= NOW())&lt;/code&gt; is a reasonable &lt;em&gt;eligibility filter&lt;/em&gt;. It is not a complete duplicate-prevention system.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Claim the record before publishing
&lt;/h2&gt;

&lt;p&gt;After Search Records, use &lt;strong&gt;Airtable → Update a Record&lt;/strong&gt; with the ID returned by the search. Set &lt;code&gt;Status&lt;/code&gt; to &lt;code&gt;Processing&lt;/code&gt; before reaching any social publishing module.&lt;/p&gt;

&lt;p&gt;That keeps a later scheduled search from treating the record as &lt;code&gt;Ready&lt;/code&gt; while an earlier run works on it. Run one worker for this queue and avoid manually starting a second copy of the scenario at the same time. Search followed by update is &lt;strong&gt;not an atomic lock&lt;/strong&gt;: two overlapping runs could both read &lt;code&gt;Ready&lt;/code&gt; before either writes &lt;code&gt;Processing&lt;/code&gt;. For strict concurrency guarantees, use a store or queue with an atomic claim and a unique key for each post/destination; do not present this Airtable-only pattern as exactly-once delivery.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Record the result of each platform
&lt;/h2&gt;

&lt;p&gt;Create your platform routes in Make. Before each publishing call, filter out a destination whose status is already &lt;code&gt;Published&lt;/code&gt;. After a confirmed successful call, update its platform status to &lt;code&gt;Published&lt;/code&gt; and save the returned post ID or URL. On a confirmed failure, mark that destination &lt;code&gt;Failed&lt;/code&gt; and keep the other destinations' results. Test each error path: a failed module can prevent a normal update module after it from running.&lt;/p&gt;

&lt;p&gt;Do not mark the whole record &lt;code&gt;Published&lt;/code&gt; just because the first branch finished. A final Airtable update should set &lt;code&gt;Status = Published&lt;/code&gt; &lt;strong&gt;only after every required destination has a confirmed success&lt;/strong&gt;. If a platform failed or its outcome is unknown, set &lt;code&gt;Status = Needs Review&lt;/code&gt; instead. &lt;a href="https://help.make.com/if-else-and-merge" rel="noopener noreferrer"&gt;Make's Router routes cannot be reconnected&lt;/a&gt;: use a separate finalizer run that reads every platform status, or design a sequential path with explicit error handling. Do not place an unconditional &lt;code&gt;Published&lt;/code&gt; update at the end of any one branch.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instagram&lt;/th&gt;
&lt;th&gt;Pinterest&lt;/th&gt;
&lt;th&gt;Overall status&lt;/th&gt;
&lt;th&gt;Next action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Published&lt;/td&gt;
&lt;td&gt;Published&lt;/td&gt;
&lt;td&gt;Published&lt;/td&gt;
&lt;td&gt;Stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Published&lt;/td&gt;
&lt;td&gt;Failed&lt;/td&gt;
&lt;td&gt;Needs Review&lt;/td&gt;
&lt;td&gt;Retry Pinterest only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uncertain&lt;/td&gt;
&lt;td&gt;Published&lt;/td&gt;
&lt;td&gt;Needs Review&lt;/td&gt;
&lt;td&gt;Check Instagram before retrying&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An error handler that merely skips a failed module can make the scenario appear complete while a platform remains unpublished. Make's error-handling and incomplete-execution settings deserve explicit testing; see &lt;a href="https://help.make.com/scenario-settings" rel="noopener noreferrer"&gt;Make's scenario settings&lt;/a&gt; and &lt;a href="https://help.make.com/options-related-to-incomplete-executions" rel="noopener noreferrer"&gt;incomplete-execution options&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Treat timeouts as uncertain, not failed
&lt;/h2&gt;

&lt;p&gt;A publishing request can reach a platform successfully, then time out before Make receives a response. Repeating it automatically may produce a duplicate. Mark that platform &lt;code&gt;Uncertain&lt;/code&gt;; inspect the platform account or query the published item if your integration supports that. Retry only after you establish that the post was not created.&lt;/p&gt;

&lt;p&gt;This is also why a fixed five-second sleep is not a duplicate-prevention strategy. A delay can help with a specific timing problem, but it cannot tell you whether a prior publish request succeeded.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Test the failure path
&lt;/h2&gt;

&lt;p&gt;Before turning scheduling on, use test posts and run these cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A future record must not be selected; a due &lt;code&gt;Ready&lt;/code&gt; record must be selected.&lt;/li&gt;
&lt;li&gt;A successful publish on all required platforms must end with &lt;code&gt;Published&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If the second platform fails after the first succeeds, the first must remain &lt;code&gt;Published&lt;/code&gt; and the record must become &lt;code&gt;Needs Review&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A retry must skip the platform that already succeeded.&lt;/li&gt;
&lt;li&gt;A timeout with an unknown outcome must stop for verification rather than immediately republish.&lt;/li&gt;
&lt;li&gt;Two overlapping manual or scheduled runs must not be assumed safe; test your concurrency controls before increasing throughput.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is &lt;strong&gt;recoverable publishing&lt;/strong&gt;: each result is visible, and a failure does not silently reset the entire workflow. This pattern greatly reduces accidental duplicates, but neither Airtable nor a generic social API gives an automatic exactly-once guarantee across systems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I created &lt;a href="https://whop.com/workflow-field-guides/small-budget-big-results-smm-automation-guide/" rel="noopener noreferrer"&gt;Small Budget, Big Results: SMM Automation Guide&lt;/a&gt;, a $15 guide with a PDF, an edited Make blueprint, and a setup checklist. The blueprint requires you to connect your own accounts, map your own fields, add retry filters, and test before scheduling. This article is free and self-contained; the guide covers the broader Airtable → Make → Gemini workflow.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>tutorial</category>
      <category>airtable</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
