<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Haka Builds]]></title><description><![CDATA[Real projects built with AI, code, and automation. Practical guides, honest lessons, and ideas you can use even if you’re not a developer.]]></description><link>https://hakabuilds.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ae64bc3b86dc722102b9a7e/d83f5808-9d0f-47f9-99ee-3e708929e1ca.png</url><title>Haka Builds</title><link>https://hakabuilds.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 10:30:53 GMT</lastBuildDate><atom:link href="https://hakabuilds.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What If You Could Multiply Your Professional Insight in Just a Few Hours?]]></title><description><![CDATA[Turn your marketing data into actionable insights with AI. Connect Meta Ads, Google Ads and GA4 to ChatGPT using n8n and a free, tested workflow.]]></description><link>https://hakabuilds.hashnode.dev/what-if-you-could-multiply-your-professional-insight-in-just-a-few-hours</link><guid isPermaLink="true">https://hakabuilds.hashnode.dev/what-if-you-could-multiply-your-professional-insight-in-just-a-few-hours</guid><category><![CDATA[AI]]></category><category><![CDATA[chatgpt]]></category><category><![CDATA[marketing]]></category><category><![CDATA[BUSINESS INTELLIGENCE ]]></category><category><![CDATA[automation]]></category><category><![CDATA[n8n]]></category><dc:creator><![CDATA[Tamás Szabó]]></dc:creator><pubDate>Mon, 09 Nov 2026 10:18:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/29b4b00f-72c3-4dae-ac91-d4b8f2310f6d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>How I spent a few hours experimenting with tools that help me see how a business is performing, bring different data sources together, and make better-informed decisions faster.</em></p>
<h2>We Already Have the Expertise. But Are We Making the Most of It?</h2>
<p>Imagine being a marketing manager, finance professional, or business owner who can get answers whenever you need them—without having to search through several different systems first.</p>
<p>Not because you've suddenly become more knowledgeable about your profession, but because the information and connections you need are finally at your fingertips, allowing you to <strong>make much better use of the expertise you already have.</strong></p>
<p>I spent a few hours experimenting with a simple way to make this happen. The result surprised even me.</p>
<p>And these days, it doesn't necessarily take an entire development team or an expensive business intelligence platform to do it.</p>
<p>Perhaps the most interesting part is that none of this relies on revolutionary new technology. Most of the tools—and much of the data—are already available to us.</p>
<p><strong>We just need to connect them.</strong></p>
<h2>I Had the Reports. What I Was Missing Was the Big Picture.</h2>
<p>Every business generates an enormous amount of valuable data. Advertising platforms produce detailed reports, analytics tools show what happens on the website, and sales and customer support systems hold even more useful information.</p>
<p>My problem wasn't a lack of data. It was that everything lived somewhere else.</p>
<p>One report arrived by email. Another required logging into an ad account. A third was buried in a different interface. To make matters worse, the data didn't always update at the same time, making comparisons inconvenient.</p>
<p>Eventually, checking everything each day became one of those tasks that was all too easy to postpone.</p>
<p>Yet the relationships between the numbers were exactly what interested me.</p>
<p>When advertising spend increases, what happens to website traffic? If a campaign starts underperforming, can I see the same change in visits? Which changes deserve attention, and which might just be short-term fluctuations?</p>
<p>Experience tells us which questions to ask. But finding the data needed to answer them still takes work.</p>
<h2>I Didn't Need Another Report</h2>
<p>Naturally, my first thought was to build a central dashboard—a single screen showing all the important metrics.</p>
<p>Then I realized I already had a few of those. :)</p>
<p>And none of them really solved my problem.</p>
<p>A dashboard usually answers the questions we anticipated when we designed it. If I want to explore a different relationship later, I may need another report or a change to the dashboard.</p>
<p>I wanted something more flexible.</p>
<p><strong>What if I could bring data from different systems into one place, then ask whatever questions I wanted?</strong></p>
<p>I wouldn't have to decide in advance which reports I'd need. I would simply need access to fresh data—and a suitable tool to help analyze it.</p>
<p>That's how I arrived at the idea of combining n8n, Google Sheets, and ChatGPT.</p>
<h2>How Does the System Fit Together?</h2>
<p>I chose <strong>n8n</strong> to handle data collection and automation.</p>
<p>n8n lets you connect different services and define when a process should run, where it should retrieve data from, how the data should be processed, and where the results should be stored.</p>
<p>In n8n, this kind of automated process is called a <em>workflow</em>.</p>
<p>Most services also provide an <strong>API</strong>—an interface that lets software request data from another service, provided it has the necessary permissions.</p>
<p>For example, an API can retrieve a campaign's advertising spend without anyone having to open the ad manager and copy the numbers manually every day.</p>
<p>The system I put together follows a simple pattern:</p>
<p><strong>Meta Ads / Google Ads / GA4 → n8n → Google Sheets → ChatGPT</strong></p>
<p>n8n takes care of the repetitive data collection. Google Sheets keeps the results organized in one place. With the appropriate access, ChatGPT can then help analyze the numbers, compare results, and spot relationships worth investigating.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/f8961a0c-ea2f-4aa6-9481-2195202ce5b9.png" alt="Screenshot from 2026-11-08 20-32-13" style="display:block;margin:0 auto" />

<h2>A Few Hours of Experimenting—and It Was Working</h2>
<p>My own setup works with more data sources than the ones covered here. Alongside marketing data, sales figures and other business information can also feed into the analysis.</p>
<p>For this article, though, I wanted to create a simpler version that other people could try for themselves.</p>
<p>I ended up with an n8n template that collects data from three popular services:</p>
<ul>
<li><strong>Meta Ads:</strong> Campaign-, ad set-, and ad-level performance for Facebook and Instagram advertising.</li>
<li><strong>Google Ads:</strong> Campaigns, ad groups, ads, and their performance metrics.</li>
<li><strong>Google Analytics 4:</strong> Website traffic, users, traffic sources, landing pages, and events.</li>
</ul>
<p>This isn't a template that generates fictional sample data. Once the necessary access is configured, it retrieves real data from your own accounts through the services' APIs.</p>
<p>It saves everything to a single Google Sheets file, with separate tabs for the different categories of data.</p>
<p>I tested the working version against real data. n8n created the required tabs and column headers, then populated them with information from the connected sources.</p>
<p>Instead of being scattered across isolated reports, the data from different platforms was now available in one shared dataset.</p>
<p>Of course, numbers from different platforms aren't always directly comparable. Conversions reported by Meta Ads and Google Ads, for example, may not match the figures in GA4. And spending recorded in different currencies shouldn't be added together without conversion.</p>
<p>Even with those caveats, the overall picture becomes much easier to explore.</p>
<h2>What Does the n8n Workflow Actually Do?</h2>
<p>At first glance, the finished workflow may look complicated. But you don't need to understand every technical step to use it.</p>
<p>It's enough to follow a single data-collection branch.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/396d0147-38dd-4dd4-902b-66d1479aea46.png" alt="Screenshot from 2026-11-08 20-55-32" style="display:block;margin:0 auto" />

<p>In simplified form, it works like this:</p>
<p><strong>Trigger → Settings → API request → Data processing → Google Sheets</strong></p>
<p>The trigger starts the process. A central <strong>CONFIG</strong> node holds the important settings. The API node connects to the relevant service, and the processing steps turn the returned information into rows suitable for the spreadsheet.</p>
<p>Finally, the Google Sheets nodes save the results.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/f934ed8b-f5e9-4d8c-8be4-d28e5c52e660.png" alt="" style="display:block;margin:0 auto" />

<p>The other branches follow a similar pattern, although each service has its own APIs and data structures.</p>
<p>The good news is that <strong>you don't have to build the workflow from scratch</strong>. I'm including an importable version with this article.</p>
<h2>And Now for the Really Interesting Part</h2>
<p>Once the data is in one place, I'm no longer limited to the usual predefined reports.</p>
<p>I can ask questions that previously would have required manually comparing several reports.</p>
<p>For example:</p>
<ul>
<li>How did advertising spend change last week, and what happened to website traffic over the same period?</li>
<li>Which campaigns improved or declined the most compared with the previous period?</li>
<li>Did traffic rise while advertising performance worsened?</li>
<li>Which traffic sources and landing pages are performing best?</li>
<li>Which change deserves a closer look?</li>
</ul>
<p>None of these are especially difficult questions for an experienced marketer.</p>
<p>The hard part is often that the information needed to answer them is spread across different systems.</p>
<p>Once that information is collected automatically, we can spend our time interpreting it instead.</p>
<p>AI can be a useful assistant here. It can summarize data, produce comparisons, and point out differences worth investigating further.</p>
<p>That doesn't mean every conclusion it draws is automatically correct. We still need to check whether the data is current, complete, and interpreted correctly. In particular, two metrics moving together doesn't necessarily mean one caused the other.</p>
<p><strong>I still make the professional decisions. I just have much more information available when I make them.</strong></p>
<hr />
<h2>Try It with Your Own Data!</h2>
<p>I'm including an <strong>importable n8n workflow JSON file</strong> with this article. It already contains the Meta Ads, Google Ads, and GA4 data-collection processes.</p>
<p>My goal was to make it possible to get started without programming or building the entire workflow from scratch. Once you've configured the required access, the template can work with your own accounts.</p>
<p>n8n and ChatGPT can also help you through the technical setup.</p>
<h3>1. Prepare a Google Sheets File</h3>
<p>First, create a separate folder in <a href="https://workspace.google.com/intl/en-US/products/drive/">Google Drive</a> and a new, empty Google Sheets file inside it.</p>
<p>You don't need to create tabs or column headers. The workflow will do that automatically during its first successful run.</p>
<p>Copy the <strong>spreadsheet ID</strong> from the browser's address bar. You'll need it in the configuration step.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/d12080e0-7634-4c9f-8d5d-e35a4c065d6a.png" alt="" style="display:block;margin:0 auto" />

<p>Google Sheets will be the central location for your collected data. n8n will save the results there, and <a href="https://chatgpt.com/">ChatGPT</a> can later work either from the connected spreadsheet or from a downloaded copy.</p>
<p>Connecting Google Drive to ChatGPT is <strong>optional</strong>. I'll show two ways to analyze the data so you can choose whichever feels more comfortable.</p>
<h3>2. Import the Workflow</h3>
<p>If you're new to n8n, start at the official website: <a href="https://n8n.io/">n8n.io</a>.</p>
<p>n8n is a relatively affordable automation platform, and you can <strong>try its cloud service free for 14 days</strong>. That's enough time to explore how it works and test the workflow included with this article.</p>
<p>The n8n Cloud trial doesn't require a credit card. Once the trial ends, you'll need a subscription to keep using the cloud service. (<a href="https://support.n8n.io/article/how-do-i-cancel-my-trial">n8n support</a>)</p>
<p>If you have some technical experience, you can also run the <strong>n8n Community Edition</strong> for free on your own computer or server—for example, using Docker.</p>
<p>You won't pay a subscription fee for the Community Edition software itself, but installation, updates, and maintenance will be your responsibility. The n8n license terms still apply.</p>
<p>You'll find detailed installation instructions in the <a href="https://docs.n8n.io/deploy/host-n8n/install-options/use-a-cloud-provider/use-docker-compose.md">official Docker Compose guide</a>.</p>
<p><strong>Once n8n is running, create a new workflow.</strong></p>
<p><strong>Download the free n8n workflow template:</strong></p>
<p><a href="https://gist.github.com/haka002/08bfbc4c4ec28a2bff371de8c63e7adc">⬇️ Download AI Marketing Analytics Starter (JSON)</a></p>
<p>Once downloaded, open n8n, create a new workflow, and select <strong>Import from File</strong> from the editor's upper-right menu.</p>
<p>Choose the JSON file, and the complete workflow will appear, ready for configuration.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/779963b2-2dad-4b9e-9e88-e1108dc55e2a.png" alt="" style="display:block;margin:0 auto" />

<p>All the required data-collection and processing steps are already there. You don't need to add or connect them individually.</p>
<p>Next, you'll configure your own account IDs and access credentials.</p>
<h3>3. Enter Your Account IDs</h3>
<p>Open the central <strong>CONFIG</strong> node.</p>
<p>This is where you'll enter your account identifiers and choose which data sources you want to use.</p>
<p>Don't worry if you're unfamiliar with these IDs. Most of them can be found in your advertising or analytics account settings, and ChatGPT can help you locate them step by step.</p>
<p>Here's what each field means and where to find the information.</p>
<p><strong>Enable or disable data sources</strong></p>
<ul>
<li><code>enable_meta</code> — Set to <code>true</code> to collect Meta Ads data (Facebook and Instagram), or <code>false</code> to disable it.</li>
<li><code>enable_google_ads</code> — Set to <code>true</code> to collect Google Ads data.</li>
<li><code>enable_ga4</code> — Set to <code>true</code> to collect Google Analytics 4 data.</li>
</ul>
<p>You only need to enable the platforms you actually use.</p>
<p><strong>Meta Ads</strong></p>
<ul>
<li><p><code>meta_ad_account_id</code> — Your Meta advertising account ID. This is <strong>not your Facebook Page ID or Business Portfolio ID</strong>. You need the ID of the advertising account itself.</p>
<p>Open <a href="https://adsmanager.facebook.com/?utm_source=chatgpt.com">Meta Ads Manager</a>, select your advertising account, and find its account ID in the account selector or account settings.</p>
<p>The workflow expects the ID with the <code>act_</code> prefix, for example: <code>act_123456789012345</code>.</p>
</li>
<li><p><code>meta_currency</code> — The currency used by your Meta advertising account.</p>
<p>For example, <code>EUR</code>, <code>USD</code>, or <code>HUF</code>.</p>
<p>You can check your account currency in Meta Ads Manager under your advertising account settings.</p>
</li>
</ul>
<p><strong>Google Ads</strong></p>
<ul>
<li><p><code>google_ads_customer_id</code> — The Customer ID of the Google Ads account whose campaign data you want to collect.</p>
<p>Open <a href="https://ads.google.com/?utm_source=chatgpt.com">Google Ads</a> and look for the 10-digit Customer ID, usually displayed in the format <code>123-456-7890</code>.</p>
<p>Enter it <strong>without hyphens</strong>, for example: <code>1234567890</code>.</p>
</li>
<li><p><code>google_ads_login_customer_id</code> — The Customer ID of the Google Ads manager account (MCC) through which you access the advertising account.</p>
<p>If you manage multiple Google Ads accounts through a manager account, enter the manager account's Customer ID here, also without hyphens.</p>
<p>You can find it by switching to your manager account in Google Ads.</p>
<p><strong>Important:</strong> This is different from <code>google_ads_customer_id</code>. The first identifies the advertising account you want to analyze; the second identifies the manager account used to access it.</p>
<p>If you don't use a manager account, the required value depends on how the workflow's Google Ads authentication is configured. ChatGPT can help you check this.</p>
</li>
</ul>
<p><strong>Google Analytics 4</strong></p>
<ul>
<li><p><code>ga4_property_id</code> — The numeric Property ID of your Google Analytics 4 property.</p>
<p>Open <a href="https://analytics.google.com/?utm_source=chatgpt.com">Google Analytics</a>.</p>
<p>Go to <strong>Admin → Property Settings → Property Details</strong> and find the <strong>Property ID</strong>.</p>
<p>Example: <code>123456789</code>.</p>
<p>Make sure you use the numeric Property ID, <strong>not the Measurement ID</strong> that starts with <code>G-</code>.</p>
</li>
</ul>
<p><strong>Google Sheets</strong></p>
<ul>
<li><p><code>spreadsheet_id</code> — The unique identifier of the Google Sheets file you created in Step 1.</p>
<p>Open your spreadsheet and look at its URL.</p>
<p>For example:</p>
<p><code>https://docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYz123456/edit</code></p>
<p>The Spreadsheet ID is the part between <code>/d/</code> and <code>/edit</code>:</p>
<p><code>1AbCdEfGhIjKlMnOpQrStUvWxYz123456</code></p>
<p>Copy only that value into the CONFIG node.</p>
</li>
</ul>
<p><strong>Data collection period</strong></p>
<ul>
<li><p><code>lookback_days</code> — The number of previous days the workflow should retrieve data for.</p>
<p>The default is <code>7</code>, meaning the workflow requests data covering the previous seven days.</p>
<p>If you have a large advertising account, consider starting with <code>1</code> or <code>3</code> to reduce the amount of data collected during testing.</p>
<p>You can increase it later.</p>
</li>
</ul>
<p><strong>Need help finding an ID?</strong></p>
<p>You don't have to figure everything out on your own.</p>
<p>Open <a href="https://chatgpt.com/?utm_source=chatgpt.com">ChatGPT</a> and try asking:</p>
<blockquote>
<p>"I'm configuring an n8n workflow that collects data from Meta Ads, Google Ads, and Google Analytics 4. I need help finding my account IDs. Please guide me step by step using the current official documentation. Explain exactly which ID I need and where to find it."</p>
</blockquote>
<p>ChatGPT can walk you through the process, even if you've never worked with APIs or automation tools before.</p>
<p><strong>Security tip:</strong> Account IDs are generally identifiers rather than passwords, but you should still avoid sharing unnecessary account information. Never paste passwords, API tokens, or secret keys into ChatGPT. Store sensitive credentials securely in n8n.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/e6601c22-b2ee-45d7-902b-70a8345751d1.png" alt="" style="display:block;margin:0 auto" />

<h3>4. Select the Right Connections</h3>
<p>In the imported workflow, open the nodes that connect to external services and select the appropriate n8n <strong>Credentials</strong> for your accounts.</p>
<p>That includes the Google Sheets nodes.</p>
<p>After importing, you may notice a small red warning icon in the bottom-right corner of some nodes.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/3823bf1f-6712-41e7-86a6-b547e3064a53.png" alt="" style="display:block;margin:0 auto" />

<p>Open each affected node (double click), check its settings and selected credentials, then close it again.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/1bec3c30-435b-4a8b-877e-987750206fac.png" alt="" style="display:block;margin:0 auto" />

<p>During testing, I found that a few import-related warnings disappeared after doing this. If a warning remains, the missing or incorrect setting still needs to be fixed.</p>
<h3>5. Run Your First Data Collection</h3>
<p>Once the necessary settings are in place, run the workflow <strong>manually</strong> for the first time.</p>
<p>The system creates any missing tabs and column headers in the specified Google Sheets file, then saves data from the enabled sources.</p>
<p>Open the spreadsheet and check that the expected data has appeared.</p>
<p>When everything works as expected, you can enable scheduled execution so the collection runs automatically—for example, every morning.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/16f5271a-8ed7-4110-abfd-097e33ed4862.png" alt="" style="display:block;margin:0 auto" />

<h3>6. Now You Can Start Asking Questions!</h3>
<p>This is where things get really interesting.</p>
<p>Once the data has arrived in Google Sheets, you can start analyzing it.</p>
<p>There are two ways to do that, depending on how closely you want to connect your systems to ChatGPT.</p>
<h4>The More Cautious Approach: Share Only What You Choose</h4>
<p>If you don't want to connect your Google Drive account to ChatGPT, that's perfectly fine.</p>
<p>Whenever you want to analyze your business performance, download the relevant spreadsheet from Google Drive—perhaps as an Excel file—and upload it to ChatGPT.</p>
<p>For the template in this article, <strong>one spreadsheet file is enough</strong> because the data is organized into separate tabs within the same file.</p>
<p>This way, <strong>ChatGPT only receives the information you deliberately upload</strong> and doesn't gain access to the other files stored in your Google Drive.</p>
<p>Keep in mind that the uploaded data still goes to the AI service provider. If it contains personal or sensitive information, consider removing that information first and review the applicable data-handling terms.</p>
<p>This approach works perfectly well if you only want to run a detailed analysis occasionally.</p>
<h4>The More Convenient Approach: Connect Google Drive</h4>
<p><strong>This is the approach I chose. :)</strong></p>
<p>I connected my Google Drive account to ChatGPT, so I no longer have to download and upload the spreadsheets before every analysis.</p>
<p>With the appropriate Google Drive connection, ChatGPT can access files available through the connected account. That also lets me bring other relevant spreadsheets into the analysis when needed.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/03ef134a-a8d9-4410-8697-5a4a84563a21.png" alt="" style="display:block;margin:0 auto" />

<p>Once the connection is configured, I can share the link to the relevant Google Sheets file and start asking questions.</p>
<p>Of course, this only works if ChatGPT can actually access that file through the integration I'm using.</p>
<p>For example:</p>
<blockquote>
<p><strong>“How much did we sell yesterday?”</strong></p>
</blockquote>
<p><em>(For this question, it's worth connecting a relevant sales system API as well: the template included here currently collects marketing and web analytics data, not sales figures.)</em></p>
<p>Or:</p>
<blockquote>
<p><strong>“If we continue at this pace, what might our revenue look like by the end of the year?”</strong></p>
</blockquote>
<p>Naturally, that requires enough reliable sales data, and the answer should be treated as a forecast, not a certainty.</p>
<p>I can also ask about campaigns, ad spend, website visits, trends, or comparisons with earlier periods.</p>
<p><strong>Here's where it gets especially useful:</strong> if n8n keeps the data up to date and ChatGPT can access the relevant spreadsheets, I can ask a new question at any time—without first assembling another report by hand.</p>
<p>When connecting Google Drive, it's still important to review the permissions you've granted. Access may cover more than just one spreadsheet.</p>
<p>If you'd rather avoid that, you could use a separate Google account that contains only the data you want to make available for analysis.</p>
<h4>Try a Question Like This</h4>
<p>Once ChatGPT has access to your data, you could ask:</p>
<blockquote>
<p>“Analyze the last seven days of Meta Ads and Google Ads performance alongside GA4 website traffic. Highlight the most important changes, identify potential problems, and suggest specific, verifiable next steps. If any data is missing, outdated, or inconsistent, point that out explicitly and don't draw unsupported conclusions.”</p>
</blockquote>
<p>And you don't have to stop after the first question. You can keep the conversation going, dig deeper into the findings, and explore the same data from different perspectives.</p>
<h4>One More Tip That's Definitely Worth Trying!</h4>
<p><strong>Ask ChatGPT:</strong></p>
<blockquote>
<p>“Every morning at 8:00, prepare a short report on yesterday's marketing performance. Show the most important changes, alert me to potential problems, and suggest specific actions to take.”</p>
</blockquote>
<p><strong>You'll like it! :)</strong></p>
<p>If your ChatGPT account supports scheduled tasks and those tasks can access the necessary data when they run, you could start every morning with a fresh analysis.</p>
<p>That way, much of the data collection and analysis can happen automatically, while you remain free to ask whatever follow-up questions you want.</p>
<h3>7. Make It Your Own</h3>
<p>Alongside the JSON file, I've prepared a separate <strong>ChatGPT customization prompt</strong>.</p>
<p>You can use it to get AI assistance with modifying the workflow—for example, adding new data fields, changing the schedule, or connecting additional data sources.</p>
<p>Always test modified workflows separately before using them with live data or automatic scheduling.</p>
<hr />
<h2>I Didn't Need More Expertise. I Needed a Better Way to Use It.</h2>
<p>When I started, all I really wanted was a simpler way to deal with reports scattered across different systems.</p>
<p>What emerged was a much more interesting possibility.</p>
<p>An experienced marketing manager knows which questions to ask about a campaign. A finance professional can recognize important relationships between the numbers. A business owner knows what information would help them make the next decision.</p>
<p><strong>In many cases, the expertise is already there. What's missing is fast, easy access to the information.</strong></p>
<p>That's what this system can help provide.</p>
<p>It doesn't replace experience, and it doesn't make decisions for us. But it can significantly reduce the time spent collecting and preparing data, while opening up new ways to analyze it.</p>
<p>And that's perhaps the most exciting part.</p>
<p>Today, a few hours of experimentation can produce tools that once would have required far more development time, resources, or money.</p>
<p><strong>A new tool doesn't automatically make us better professionals. What matters is how much more we can achieve with the expertise we already have.</strong></p>
<p>I originally set out to build a more convenient reporting solution.</p>
<p><strong>I ended up with a tool that gives me a much clearer picture of what's happening in a business—and lets me focus on the questions that really matter.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Building an AI Marketing Studio: From Product URL to Ad Creative]]></title><description><![CDATA[How I built an AI Marketing Studio that turns product URLs into ad creatives using AI. A practical look at automation, image generation and development.]]></description><link>https://hakabuilds.hashnode.dev/building-an-ai-marketing-studio-from-product-url-to-ad-creative</link><guid isPermaLink="true">https://hakabuilds.hashnode.dev/building-an-ai-marketing-studio-from-product-url-to-ad-creative</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[ai marketing]]></category><category><![CDATA[Python]]></category><category><![CDATA[generative ai]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Tamás Szabó]]></dc:creator><pubDate>Sun, 01 Nov 2026 17:36:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/a6b7895c-dbb6-4a87-b98a-5cda3603c57e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One Saturday morning I set out to build something genuinely useful with Claude. By midnight I had a marketing studio that turns my winning Meta ads into new images and directs short videos with an AI presenter.</p>
<p><em>The screenshots show the live app, but in a separate demo workspace with made-up example data, so no real ad numbers are published. The product photos are Metabloom's own; the ad, scene and moodboard images were generated on Higgsfield with the app itself.</em></p>
<h2>Where it started</h2>
<p>I wanted a tool I would actually use, not another demo. Metabloom (a Shopify store selling a wellness product) constantly needs new ad images and short videos, and that meant a lot of manual work: download, write a prompt, generate, upload, measure. On top of that, everything had to be compared with how the Meta ads performed, to work out what to make next and how.</p>
<p>The starting point was my existing Luxmatico Toolbox, a Django app that already monitored Meta ads and Google Analytics. The Marketing Studio module was built into it.</p>
<p>The way of working stayed the same all day: I said what I needed and why, and Claude Code wrote it, tested it, checked it in a browser and pushed it to a feature branch. We always talked through the bigger steps first and only built after that.</p>
<h2>The image loop: from a winning ad to the next one</h2>
<p>By evening the loop was closed: a winning ad becomes a new image in a few clicks, and the image lands straight in the ad account's image library. Five steps, one app:</p>
<p><strong>1. Add the brand.</strong> I type a domain and the app reads its colors, fonts, logo and page text, plus the products and their photos from the Shopify store. Every landing page keeps its own look, and text that was read badly can be fixed by hand.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/c8b1cc8c-4427-4c2d-bad4-69998f32522b.jpg" alt="The brand page: colors, fonts, page text and products read from the website" style="display:block;margin:0 auto" />

<p><em>The brand page: everything the app read from the website and the shop.</em></p>
<p><strong>2. What wins?</strong> The Creative Lab shows every Meta ad as a card: the creative, spend, purchases and, most importantly, the cost per purchase. Cards with too little data are flagged.</p>
<p><strong>3. Why?</strong> ChatGPT or Claude puts the cheapest and the most expensive ads side by side, images included, and tells me what the winners have in common. Every idea comes with a ready image prompt.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/4dd0951f-d617-44a7-bbe8-66419b9fe388.jpg" alt="Creative Lab: ads sorted by cost per purchase, with the AI analysis of what the winners share above them" style="display:block;margin:0 auto" />

<p><em>Creative Lab: the cheapest purchases first, the AI's findings on top.</em></p>
<p><strong>4. On to the next one.</strong> One click turns an idea into an image project: the prompt, the product photo and the brand style (each color can be switched off) are already in place.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/36a769fb-8924-457e-8205-8cc51eebcbe8.jpg" alt="The image editor with the brand block, the prompt, the references and the finished variants" style="display:block;margin:0 auto" />

<p><em>The image editor: brand style, prompt, references and the finished variants.</em></p>
<p><strong>5. Ship and measure.</strong> The "Upload to Meta" button puts the image into the ad account's image library, with no downloading and re-uploading. I link the new ad back to the project, and the app compares its cost with the ad it came from.</p>
<p>Accepted images are also copied to Google Drive automatically, one folder per project.</p>
<h2>The video director: from brief to rough cut</h2>
<p>In the evening came the second loop: video. I need two kinds: short explainer clips with a recurring AI presenter, and TV-commercial-style films about a product. The hardest part had always been finding the story, and the fact that everything lived scattered across chats, folders and Higgsfield. Now the tabs of one project take it all the way through:</p>
<table>
<thead>
<tr>
<th>Tab</th>
<th>What it does</th>
</tr>
</thead>
<tbody><tr>
<td>Brief</td>
<td>Starts from a template, so it always shows what needs deciding: hook, audience, CTA, what to avoid, sources. The presenter can be a Higgsfield character or a character sheet with outfits, with an ElevenLabs voice. A switch says whether it is an ad.</td>
</tr>
<tr>
<td>Story</td>
<td>The AI suggests stories in rounds. I star the good ones, ask for more like them or a mix, and pick one.</td>
</tr>
<tr>
<td>Moodboard</td>
<td>Groups for location, outfit, light. Images can be pasted with Ctrl+V or generated cheaply, and every group fills the screen in full-screen mode, on any monitor. A whole group can be saved as one large image and handed to the model in one go.</td>
</tr>
<tr>
<td>Scenes</td>
<td>Scene cards: what is seen, camera, light, start-frame and motion prompt, narration, on-screen text. The app checks the length and whether the narration fits.</td>
</tr>
<tr>
<td>Sound</td>
<td>Speech model with its price, my own ElevenLabs voices, music and sound effects, with the cost next to every clip.</td>
</tr>
<tr>
<td>Export</td>
<td>Trimming clips, a quick rough cut, and a ZIP with everything. It includes a DaVinci Resolve timeline that is ready to edit, every element in place.</td>
</tr>
<tr>
<td>Dossier</td>
<td>Every brief version, AI conversation, decision, generation and cost in one place, exportable, for our own records.</td>
</tr>
</tbody></table>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/54bcb4df-40b2-4f96-9988-0cd060ea270f.jpg" alt="Story tab: the AI's story ideas, favorites starred, one chosen" style="display:block;margin:0 auto" />

<p><em>The Story tab: ideas in rounds, the good ones starred, one chosen.</em></p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/c4eaa6c9-7afc-4301-9048-34f940c06a12.jpg" alt="A moodboard group in full screen on a 5120-pixel-wide monitor" style="display:block;margin:0 auto" />

<p><em>A moodboard group in full screen, filling a 5120-pixel-wide monitor.</em></p>
<p>The video is made scene by scene on Higgsfield: first a clip from the start frame, then lip sync with the voice (Sync Lipsync 3), or a talking head from the start frame and the voice in one step (Intone). Every paid video shows its price first and only starts on a click.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/34ec83d0-abe6-4228-9ffd-ec433b2d4151.jpg" alt="Scenes tab: five scenes with start frames and the voice and video lengths" style="display:block;margin:0 auto" />

<p><em>The Scenes tab: start frame, voice and video length for every scene.</em></p>
<p>The ad switch is backed by one simple rule: a single 9:16 video is enough if the face, the product and the text stay in the center, away from the app's top 14 and bottom 35 percent. That way the 4:5 feed crop works too.</p>
<h2>Who drives the app</h2>
<p>One setting decides whether ChatGPT or Claude drives the app, with the other as a fallback. That AI analyzes the ads, writes the stories and storyboards, and runs the generations.</p>
<p>There are two ways to generate:</p>
<ul>
<li><strong>From the subscription, through the Higgsfield skill.</strong> The app hands the task to ChatGPT or Claude, which runs it through the Higgsfield connector, with the same skill I use in their chat apps. Images and videos are paid from my Higgsfield plan credits; the app just waits and saves the result.</li>
<li><strong>Optionally, directly through the APIs.</strong> With an API key the app talks to the services itself: to Higgsfield's image API, with a price estimate before every run, and to ElevenLabs for voice, music and effects.</li>
</ul>
<p>For ElevenLabs the direct API is the better route: it uses the same subscription credits as the web app and needs no AI in between. For Higgsfield it is the other way round: the API is paid separately, while the connector generates from the plan credits.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/a995e1cd-284c-4ac8-a037-dfe82cfc8767.jpg" alt="Sound tab: speech models with prices, my own ElevenLabs voices, music and effects" style="display:block;margin:0 auto" />

<p><em>The Sound tab: speech models with prices, my ElevenLabs voices, music and effects with their cost.</em></p>
<h2>Connected systems</h2>
<p>Seven services and tools work together. The keys live only on the server, never in the browser or the logs.</p>
<table>
<thead>
<tr>
<th>System</th>
<th>What it is used for</th>
<th>How it connects</th>
</tr>
</thead>
<tbody><tr>
<td>ChatGPT (OpenAI)</td>
<td>Ad analysis, story ideas, storyboards, running Higgsfield generations</td>
<td>API key, primary or fallback</td>
</tr>
<tr>
<td>Claude (Anthropic)</td>
<td>The same tasks, interchangeably; it also built the app</td>
<td>API key; Claude Code for building</td>
</tr>
<tr>
<td>Higgsfield</td>
<td>Images (Nano Banana and others), video (Kling, Seedance, Veo), Sync Lipsync 3, Intone</td>
<td>Connector (OAuth) using plan credits, or API key</td>
</tr>
<tr>
<td>ElevenLabs</td>
<td>Presenter voice (Eleven v4), music, sound effects, my saved voices</td>
<td>API key, subscription credits</td>
</tr>
<tr>
<td>Meta Marketing API</td>
<td>Ad results per creative, new images into the ad account's image library</td>
<td>Read-only token, a separate token for image uploads</td>
</tr>
<tr>
<td>Google Drive</td>
<td>Accepted images into project folders</td>
<td>OAuth, sees only its own files</td>
</tr>
<tr>
<td>ffmpeg</td>
<td>Quick rough cut of the scene videos</td>
<td>On the server</td>
</tr>
</tbody></table>
<h2>How we worked with Claude Code</h2>
<p>The core idea and the detailed concept came from me: I wanted to make handling ads simpler. I then worked it out step by step with the AI assistant.</p>
<p>A few rules kept the pace and the quality up all day:</p>
<ul>
<li><strong>Discuss first, then build.</strong> For the bigger features (brands, the video director, sound) Claude first made a proposal and asked questions, and only started coding after "ok, go ahead".</li>
<li><strong>Small steps.</strong> The video part was built in seven steps, each its own commit that I could try out along the way. When something occurred to me in the meantime ("put Story before Moodboard", "show a loader everywhere"), it went into the next step.</li>
<li><strong>Every step with tests and a browser check.</strong> By evening 345 backend and 64 JavaScript tests were running. Claude looked at every screen in a real browser before saying it was done.</li>
<li><strong>The app is designed to avoid duplicate paid generation requests.</strong> A generation that may already have started is never sent again; for video it always asks for the price first.</li>
<li><strong>Feature branch, then merge.</strong> Code only reached main through pull requests.</li>
<li><strong>Security even though the site is not public.</strong> Keys stay on the server, never in the browser, the database or the logs, and OAuth tokens are stored encrypted. Meta access is read-only, with one exception, image uploads, on a separate token. The app checks uploaded files, and it only downloads external files over HTTPS from public addresses.</li>
</ul>
<p>The cost: during the day, I hit the five-hour usage limit three times on the Pro plan and used about half of my weekly allowance. By my rough calculation, that represents around €2.50 of the subscription fee. The entire build took one long Saturday, from morning until after 11 pm.</p>
<p>Which raises the question: wouldn't it be better for everyone to build, or have someone build, their own app for their own problem with methods like this, instead of renting ready-made software that only partly covers what they need?</p>
<h2>Lessons learned</h2>
<p>Most of the time did not go into the code but into the small quirks of the services:</p>
<ul>
<li><strong>Quality and resolution set the price.</strong> The first API image cost 24 cents because it used an expensive model at high quality. The default has since been 1k resolution and low quality; anything pricier has to be chosen on purpose.</li>
<li><strong>The API has no complete price list.</strong> The app refreshes prices daily from estimates and actual usage, and shows them next to the models.</li>
<li><strong>The Higgsfield key has two parts.</strong> In the "id:secret" format, the part after the colon is the secret; that is what the first 401 error was about.</li>
<li><strong>The site cannot be seen from outside.</strong> If the app is not on a public HTTPS address, Higgsfield cannot import the reference images. In that case the app uploads them to Higgsfield's storage itself.</li>
<li><strong>The ElevenLabs web app gives two takes, the API one.</strong> So uploading an audio file stayed a first-class option, with a "Copy narration" button.</li>
<li><strong>The ElevenLabs key cannot always see the balance.</strong> That needs the separate "User → Access" permission on the key. The actual cost, however, comes back with every response in a <code>character-cost</code> header.</li>
<li><strong>A loader makes a big difference.</strong> Where you have to wait, a pop-up loader appears; where something is being made in the background, a local loader and skeleton cards show where the result will land.</li>
</ul>
<h2>What's next</h2>
<p>The image workflow is already in use, and the video workflow is now implemented. Next, I’ll use it to produce a complete video, from the first idea to the DaVinci Resolve timeline, and refine anything that needs improvement along the way.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae64bc3b86dc722102b9a7e/aff7df6c-c9fa-4115-81fc-826674dd05cb.jpg" alt="Export tab: the quick rough cut and the ZIP with the DaVinci timeline" style="display:block;margin:0 auto" />

<p><em>The Export tab, where that video will end up: a quick rough cut and a ZIP with the DaVinci timeline.</em></p>
<p>The lesson in one sentence: one day was enough to turn a scattered, manual process into one traceable tool, as long as you know exactly what you want and the AI partner works in small, checked steps.</p>
<h2>Closing</h2>
<p>The app already removes several manual steps from my creative workflow, and I’ll keep improving it as I use it. Still, what surprised me most was not the result but that I started at all.</p>
<p>Six months ago I would not even have begun a project like this. Designing, writing and testing it next to my job would have taken weeks. This time one Saturday was enough, and most of my time went into deciding what I wanted, not into making it.</p>
<p>That is the biggest change: the distance between an idea and a working tool has shrunk to days. Where this will be in a year or two, I don't know. If it keeps going at this pace, the question may no longer be whether I can build what I need, but whether I know exactly what I need.</p>
]]></content:encoded></item></channel></rss>