---
title: "Hayrullah Kar (@magesheet) | Hashnode"
description: "Founder & Automation Strategist @MageSheet | Google Apps Script & AI Specialist. Read the latest articles by Hayrullah Kar on Hashnode."
url: "https://hashnode.com/@magesheet"
---

@magesheet

# Hayrullah Kar

@magesheet · Sakarya,Turkey · Joined May 2026

Founder & Automation Strategist @MageSheet | Google Apps Script & AI Specialist.

[Website](https://magesheet.com/)

## Comments

[Your filter question, whether the process is specific to how the team works and will still look like this in a year, puts into words something the sheet can't check for itself. I haven't run enough cases to give an honest rate for how often the projection flips the verdict. Where I'd expect it to matter most is when seats or renewal uplift are likely to grow, because the flat formula quietly assumes today's price stays the same forever.](https://hashnode.com/posts/build-vs-buy-break-even-google-sheets/6aecc4134175d3022d7bdd99/comment/6aed3e799bdced2869ee286b#reply-6aef441abd4ad8233da4efb9)

Reply · Article · 2d ago · [Build vs Buy in Google Sheets: The Break-Even Cell That Said -400 Months](https://hashnode.com/posts/build-vs-buy-break-even-google-sheets/6aecc4134175d3022d7bdd99)

[Counting accepted plus rejected against the input is a useful check, but a count can balance by accident: one row dropped and another written twice still adds up to 12. Checking that every input row ID appears exactly once across the two output files closes that gap, and costs about the same to run.](https://hashnode.com/posts/the-agent-finished-its-turn-did-the-job-actually-finish/6aeca7659dcf05719b09ac18/comment/6aeec8ac5c8154293b3ac891)

Comment · Article · 2d ago · [The agent finished its turn. Did the job actually finish?](https://hashnode.com/posts/the-agent-finished-its-turn-did-the-job-actually-finish/6aeca7659dcf05719b09ac18)

[The status code legend under Event deliveries is a handy shortcut for anyone staring at a failed endpoint. One cause I would add: Stripe does not guarantee that events arrive in the order they were created, and retries make the mix worse. A handler that writes the subscription status straight from each payload can apply an older customer.subscription.updated after a newer one and leave Supabase in the wrong state, even though every delivery shows 200 and every event ID is stored once. Two simple fixes: re-fetch the subscription from the Stripe API inside the handler and write what it returns, or store the created timestamp of the last applied event on the row and skip anything older.](https://hashnode.com/posts/why-isn-t-my-stripe-webhook-updating-supabase/6ae9d43fde20b4f15aa70ce8/comment/6aeec84651134f1647c84073)

Comment · Article · 2d ago · [Why isn’t my Stripe webhook updating Supabase?](https://hashnode.com/posts/why-isn-t-my-stripe-webhook-updating-supabase/6ae9d43fde20b4f15aa70ce8)

[Quoting each claim next to its docs page made this easy to trust. Two additions for Pattern A at the 80,000-row scale. Since you already sort on a unique key, keyset paging is an option: WHERE ORDER\_ID > last\_seen\_id ORDER BY ORDER\_ID LIMIT 200, then carry the last ORDER\_ID of each page into the next query. Inserts and deletes no longer shift the pages, and Snowflake does not have to skip past an ever larger prefix on each of the roughly 400 calls. For the "keep the data still" problem, Time Travel gives a fixed snapshot without copying anything: capture one timestamp before the loop and add AT(TIMESTAMP => that value) to the table in every page query, as long as it stays inside the table's retention period.](https://hashnode.com/posts/snowflake-connector-200-row-cap-in-uipath-integration-service-how-to-paginate-or-go-async/6aebf8ace71dce2820c9da0a/comment/6aecc2148810490743b2e6f2)

Comment · Article · 4d ago · [Snowflake connector 200-row cap in UiPath Integration Service: how to paginate or go async](https://hashnode.com/posts/snowflake-connector-200-row-cap-in-uipath-integration-service-how-to-paginate-or-go-async/6aebf8ace71dce2820c9da0a)

[Turning the "I might use it" feeling into cost per use and days idle is a useful reframe, and the honest limits section covers the cases I would have raised. One thing in the G2 rule: because Uses counts the last 30 days, any row with at least one use has a Last used date within 30 days of J1. So E2>60 can only be true when C2 is already 0, and changing the 60 never changes a result, even though the post suggests tuning it. If the idle threshold gets its own cell and alone decides Cancel, with zero-use rows going to Review instead, the knob starts working. A service used every six weeks or so is then not flagged for cancelling the first month it skips.](https://hashnode.com/posts/keep-or-cancel-a-10-minute-monthly-subscription-review-in-a-spreadsheet/6aeb6611d086bc92ea603393/comment/6aecbe58776826235e8eabd3)

Comment · Article · 4d ago · [Keep or cancel? A 10-minute monthly subscription review in a spreadsheet](https://hashnode.com/posts/keep-or-cancel-a-10-minute-monthly-subscription-review-in-a-spreadsheet/6aeb6611d086bc92ea603393)

[The deterministic backbone with one model call for scoring is a pattern I can point people to. A small mismatch in the policy JSON: allowed\_tools uses names like crm.create\_deal, but requires\_human\_approval lists create\_deal. If the runtime matches tool names literally, the approval rule never fires for the one tool it was written for. Using the same identifier in both lists, plus a test that fails when an approval-listed action matches no tool, would close that gap. Also, the MIT figure in the body is about pilots with no measurable P&L impact, which is a different claim from the title's "never reach production".](https://hashnode.com/posts/why-95-of-ai-agent-prototypes-never-reach-production-and-how-to-build-one-that-does/6ae9a58925e12c86443b59ce/comment/6aeb19cdeba87a600a642a24)

Comment · Article · 5d ago · [Why 95% of AI Agent Prototypes Never Reach Production — and How to Build One That Does](https://hashnode.com/posts/why-95-of-ai-agent-prototypes-never-reach-production-and-how-to-build-one-that-does/6ae9a58925e12c86443b59ce)

[Putting the follow-up list on the Home screen, with the 3-day no-answer rule, is the part I'd copy. One thing to check on the Viewed status: if the quote page records a view whenever the link is requested, WhatsApp may fetch the link to build its preview when the owner pastes it, and the owner opening their own link counts too. Quotes can then show Viewed before the client has seen them. Recording the view from a small script that runs in the browser after the page loads (a google.script.run call), and giving the owner a separate preview link that doesn't log anything, keeps the status honest. Since the follow-up list relies on that status, a false Viewed can hide the quotes that most need chasing.](https://hashnode.com/posts/how-i-built-a-quotation-app-for-small-businesses-with-google-apps-script/6aea5e013bfbba0f1ed2695d/comment/6aeb197c62e01d957af396fb)

Comment · Article · 5d ago · [How I Built a Quotation App for Small Businesses with Google Apps Script](https://hashnode.com/posts/how-i-built-a-quotation-app-for-small-businesses-with-google-apps-script/6aea5e013bfbba0f1ed2695d)

[One detail in section 1 is worth adjusting. MCP is not limited to a blocking request and response. The Streamable HTTP transport can answer a tool call with a Server-Sent Events stream, no WebSockets needed, and the spec has notifications/progress for long calls. Your ticket pattern still makes sense behind a proxy with a hard idle timeout.](https://hashnode.com/posts/architecting-durable-mcp-servers-in-laravel-for-long-running-ai-agents/6ae5c0202b6f7d05044d6501/comment/6ae6f1c312b873a336d03c13)

Comment · Article · Nov 1 · [Architecting Durable MCP Servers in Laravel for Long-Running AI Agents](https://hashnode.com/posts/architecting-durable-mcp-servers-in-laravel-for-long-running-ai-agents/6ae5c0202b6f7d05044d6501)

[Reminding readers to verify the HMAC against the raw body, before any JSON parsing, saves people a common hour of debugging. There is one trap in the snippet itself. crypto.timingSafeEqual throws a RangeError when the two buffers have different lengths, so a request with a missing or malformed header never reaches the 401 branch. In Express 4 a rejection from an async handler is not caught for you, so that request can hang instead of being refused. Checking the lengths first and returning 401 on a mismatch fixes it. I would also move processOrderEvent after the response. Shopify expects a reply within a few seconds and retries otherwise, and waiting on a WhatsApp API call inside the handler is the easiest way to cause the duplicate deliveries your section 7 then has to clean up.](https://hashnode.com/posts/how-to-build-a-whatsapp-cod-order-confirmation-workflow-for-shopify/6ae4485d63651cef06af99b8/comment/6ae6f1367cc2fac5284d3e1c)

Comment · Article · Nov 1 · 1 · [How to Build a WhatsApp COD Order Confirmation Workflow for Shopify](https://hashnode.com/posts/how-to-build-a-whatsapp-cod-order-confirmation-workflow-for-shopify/6ae4485d63651cef06af99b8)

[Yasin abi, taslakları göndermeden önce bir şey sormak istiyorum. Sizin ekip tasarımı hangi programda yapıyor, Figma mı? Bize sonunda renk kodları, yazı tipi ve ikonlarla birlikte bir dosya olarak dönerseniz yazılıma çok daha hızlı aktarırız.](https://hashnode.com/posts/5-make-com-google-sheets-automations-every-solopreneur-should-steal-free-walkthrough/6ae0b24e99b85e3bf02b20b2/comment/6ae1a57c40eb03c844403675)

Comment · Article · Oct 28 · [5 Make.com + Google Sheets Automations Every Solopreneur Should Steal (Free Walkthrough)](https://hashnode.com/posts/5-make-com-google-sheets-automations-every-solopreneur-should-steal-free-walkthrough/6ae0b24e99b85e3bf02b20b2)
