<?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: Akash Rajpurohit</title>
    <description>The latest articles on DEV Community by Akash Rajpurohit (@akashrajpurohit).</description>
    <link>https://dev.to/akashrajpurohit</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%2F393909%2F0ab73809-a4d3-43f7-bf63-682c76ef3d26.jpg</url>
      <title>DEV Community: Akash Rajpurohit</title>
      <link>https://dev.to/akashrajpurohit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akashrajpurohit"/>
    <language>en</language>
    <item>
      <title>Post new funding rounds to Slack every morning with n8n</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:20:06 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/post-new-funding-rounds-to-slack-every-morning-with-n8n-3bej</link>
      <guid>https://dev.to/akashrajpurohit/post-new-funding-rounds-to-slack-every-morning-with-n8n-3bej</guid>
      <description>&lt;p&gt;A Slack channel that posts three or four newly funded companies each morning gets read. A CRM view of the same companies usually does not.&lt;/p&gt;

&lt;p&gt;Here is that workflow in n8n. Four nodes, about fifteen minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The nodes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/" rel="noopener noreferrer"&gt;Schedule Trigger&lt;/a&gt;.&lt;/strong&gt; Once a day, early. Pick a time before your reps start, so the list is waiting rather than arriving mid-call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Datahyena.&lt;/strong&gt; Fetch funding events with your filter. There is an &lt;a href="https://www.npmjs.com/package/n8n-nodes-datahyena" rel="noopener noreferrer"&gt;n8n community node&lt;/a&gt; if you want the fields as a form, or use the HTTP Request node against the API directly. Either works.&lt;/p&gt;

&lt;p&gt;Set the filter tight. Stage, minimum amount, countries, industry. If you have not written your trigger down yet, do that first, because this node is where it lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Filter or Code.&lt;/strong&gt; Optional, and worth adding once the basics work. Drop rows that already exist in your CRM, or score them so the highest fit lands at the top of the message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Slack.&lt;/strong&gt; Post to the channel. Block Kit if you want it to look decent, plain text if you want it done today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the message readable
&lt;/h2&gt;

&lt;p&gt;The failure mode here is dumping raw JSON into a channel. Nobody reads it twice.&lt;/p&gt;

&lt;p&gt;One block per company, four facts each:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*Legora* raised $50M Series B
Sweden · Professional Services · 15 Apr
Investors: General Catalyst, Y Combinator
→ legora.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Company, amount and stage, where and what, who backed it. That is enough for a rep to decide in two seconds whether to open the site.&lt;/p&gt;

&lt;p&gt;Add a thread reply with the source article if you have it. Reps who want context will click, and the channel stays scannable for the ones who do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Only posting what is new
&lt;/h2&gt;

&lt;p&gt;Whatever source you use, track a cursor between runs. Without it you will post the same companies every morning and the channel will be muted within a week.&lt;/p&gt;

&lt;p&gt;In n8n, store the cursor in a static data field or a small table and pass it into the fetch node on the next run. It is one extra step and it is the difference between a channel people read and a channel people mute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this beats a CRM view
&lt;/h2&gt;

&lt;p&gt;Three things.&lt;/p&gt;

&lt;p&gt;It is ambient. People see it without navigating anywhere.&lt;/p&gt;

&lt;p&gt;It is social. Someone claims a company in the thread and everyone else knows. That does not happen in a CRM list view.&lt;/p&gt;

&lt;p&gt;It is fast to change. Filter too broad, edit one node. Nobody has to file a ticket for a report change.&lt;/p&gt;

&lt;p&gt;Once the channel is working and reps are actually claiming companies out of it, then wire the same workflow into your CRM as a second branch. Do it in that order. A CRM integration that nobody trusts yet is just more rows in a database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extending it
&lt;/h2&gt;

&lt;p&gt;The same four-node shape works for other triggers. Swap the fetch node for acquisitions if you sell into post-merger integration, or for executive moves if a new VP is your buying signal. New leaders change vendors in their first ninety days, which is a better trigger than most people realise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;p&gt;The trigger design question is covered in &lt;a href="https://dev.to/akashrajpurohit/your-funding-trigger-is-probably-too-broad-l9"&gt;Your funding trigger is probably too broad&lt;/a&gt;, and the data quality issues that will bite you once this is running are in &lt;a href="https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3"&gt;Four traps that quietly break funding data pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to try it, the &lt;a href="https://apify.com/datahyena/company-funding-rounds" rel="noopener noreferrer"&gt;funding rounds actor on Apify&lt;/a&gt; needs no signup, and the &lt;a href="https://datahyena.com/docs?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=n8n-slack" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; cover the filter fields for the HTTP node route.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://datahyena.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=n8n-slack" rel="noopener noreferrer"&gt;Datahyena&lt;/a&gt;, a self-serve API for funding, acquisition and executive-move signals.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>nocode</category>
      <category>api</category>
    </item>
    <item>
      <title>Where to get startup funding data, and what each option actually costs you</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:19:09 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/where-to-get-startup-funding-data-and-what-each-option-actually-costs-you-54ge</link>
      <guid>https://dev.to/akashrajpurohit/where-to-get-startup-funding-data-and-what-each-option-actually-costs-you-54ge</guid>
      <description>&lt;p&gt;If you need to know which companies just raised, you have five real options. They trade cost against effort in different directions, and the right pick depends on one question: do you need history, or do you need new activity?&lt;/p&gt;

&lt;p&gt;Those are different products, and most of the frustration I see comes from buying one and needing the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading it yourself
&lt;/h2&gt;

&lt;p&gt;Free. Fine for a handful of deals a week. TechCrunch, EU-Startups, Axios Pro Rata, and your vertical's trade press cover most of what matters in your segment.&lt;/p&gt;

&lt;p&gt;It does not scale, and it is the first thing to slip when the week gets busy. If your process depends on someone remembering to skim on Monday, it will break within a month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Incumbent databases
&lt;/h2&gt;

&lt;p&gt;Crunchbase, PitchBook, Dealroom. Deep history, strong coverage, entity graphs that took years to build.&lt;/p&gt;

&lt;p&gt;They are built for research and investment workflow, sold on annual contracts, and usually need a sales conversation before you can evaluate them. API access is often a separate and more expensive tier than seat access, which catches teams out when they try to automate later.&lt;/p&gt;

&lt;p&gt;Right choice if you need to answer "who has raised in this space over five years". Heavy if you only need "who raised this week".&lt;/p&gt;

&lt;h2&gt;
  
  
  Newer signal providers
&lt;/h2&gt;

&lt;p&gt;Harmonic, Coresignal, and similar. Built for the GTM use case rather than for research, generally API-first, generally cheaper to start. Coverage is narrower than the incumbents on history but competitive on recent activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public filings
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.sec.gov/edgar/search/" rel="noopener noreferrer"&gt;SEC EDGAR Form D&lt;/a&gt; in the US, national registries elsewhere. Free and authoritative.&lt;/p&gt;

&lt;p&gt;The catch is lag and completeness. A Form D is filed within 15 days of first sale, plenty of rounds never surface in a form you can watch, and the filing tells you almost nothing useful about the company. Good as a cross-check, weak as a primary feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signal APIs
&lt;/h2&gt;

&lt;p&gt;Pay for a filtered feed rather than a database seat. You send a filter, you get structured rows back, you pay for what you pull.&lt;/p&gt;

&lt;p&gt;This is the shape that fits an automated pipeline best, because the output is already structured and the cost scales with what you actually use instead of with headcount.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing
&lt;/h2&gt;

&lt;p&gt;Ask what you are going to do with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research and market mapping&lt;/strong&gt; wants depth and history. Buy an incumbent database, take the seat, accept the contract.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outbound and pipeline&lt;/strong&gt; wants a feed. You need recency, structured fields, and something that runs on a schedule without a human. Depth of history is close to worthless here, because nobody is opening with "congratulations on your 2019 Series A".&lt;/p&gt;

&lt;p&gt;The mistake is buying a research tool for a pipeline job. You end up paying for five years of history to use the last five days, and you still have to build the automation yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you commit
&lt;/h2&gt;

&lt;p&gt;Whichever direction you go, test with your real filter, not with a demo query. Run your actual stage, amount, geography and industry constraints and count what comes back per day. A source that looks broad in a demo can return three rows a week once your filter is applied.&lt;/p&gt;

&lt;p&gt;Then check the quality of those rows. I wrote up the four failure modes that matter most in &lt;a href="https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3"&gt;Four traps that quietly break funding data pipelines&lt;/a&gt;, and they apply to every provider on this list.&lt;/p&gt;

&lt;p&gt;You can run that test against our data without signing up for anything, using the &lt;a href="https://apify.com/datahyena/company-funding-rounds" rel="noopener noreferrer"&gt;funding rounds actor on Apify&lt;/a&gt;, or read the &lt;a href="https://datahyena.com/docs?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=where-to-get" rel="noopener noreferrer"&gt;filter behaviour in the API docs&lt;/a&gt; if you want to compare it against what you use today.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://datahyena.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=where-to-get" rel="noopener noreferrer"&gt;Datahyena&lt;/a&gt;, which is the last category on this list. The comparison above is how I would pick if I were not.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>startup</category>
      <category>data</category>
      <category>tools</category>
    </item>
    <item>
      <title>Your funding trigger is probably too broad</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:17:35 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/your-funding-trigger-is-probably-too-broad-l9</link>
      <guid>https://dev.to/akashrajpurohit/your-funding-trigger-is-probably-too-broad-l9</guid>
      <description>&lt;p&gt;Most teams that run outbound off funding announcements define the trigger as "companies that raised". That is not a trigger. It is a firehose, and working it costs more time than doing nothing.&lt;/p&gt;

&lt;p&gt;The fix takes about twenty minutes and it happens before you touch any tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write the trigger as a filter someone else could run
&lt;/h2&gt;

&lt;p&gt;Four dimensions. Be specific on each one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage.&lt;/strong&gt; A seed company and a Series D company buy completely differently. Seed has one person making the call and no procurement. Series D has a security review. Pick the stages that match how you actually sell. A $50k ACV product has no business chasing pre-seed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amount.&lt;/strong&gt; Round size is a rough proxy for what they can spend. Set a floor and be willing to raise it. If your product costs $2k a month, a $500k round is not your customer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Geography.&lt;/strong&gt; Only the countries you can sell into and support. Timezone and language matter more than people admit when they are drawing the map.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Industry.&lt;/strong&gt; Narrow to segments where you have proof. A reference in the same vertical is worth more than three extra prospects outside it.&lt;/p&gt;

&lt;p&gt;Written out, mine would read: seed through Series B, at least $2M, in Germany, France, the Netherlands or the Nordics, in software or fintech.&lt;/p&gt;

&lt;p&gt;If you have not defined an ICP this precisely before, &lt;a href="https://www.lennysnewsletter.com/" rel="noopener noreferrer"&gt;the ICP framing in Lenny Rachitsky's newsletter&lt;/a&gt; is a reasonable starting point. The funding trigger is just your ICP plus a timing condition.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test
&lt;/h2&gt;

&lt;p&gt;A good trigger produces a handful of companies a day that a rep is glad to see. Not a hundred. If your filter returns two hundred rows, you have built a list, and a list gets ignored.&lt;/p&gt;

&lt;p&gt;The instinct is to widen so nothing is missed. Resist it. Reps calibrate on the first twenty rows they work. If those are bad, they stop opening the feed, and it does not matter what you send after that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timing is part of the trigger
&lt;/h2&gt;

&lt;p&gt;Every vendor in your prospect's category reads the same announcements. The company that raised on Tuesday gets a wave of outreach by Friday, most of it identical.&lt;/p&gt;

&lt;p&gt;Two consequences worth planning around. A weekly batch is usually too slow, because by the time you send you are in the middle of the wave. And being early beats being clever: a plain short message on day one outperforms a polished sequence on day ten.&lt;/p&gt;

&lt;p&gt;If you fix one thing about your current process, make it the gap between the announcement and your first touch. If that is more than a few days, nothing else you tune will matter much.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to measure
&lt;/h2&gt;

&lt;p&gt;Three numbers, and be honest about them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Announcement to first touch.&lt;/strong&gt; Days, not weeks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reply rate against your non-triggered baseline.&lt;/strong&gt; If funding-triggered outreach is not clearly better, the trigger is too broad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share of delivered rows a rep actually works.&lt;/strong&gt; If they ignore most of it, tighten the filter. A small list that gets worked beats a big one that does not.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Then go build it
&lt;/h2&gt;

&lt;p&gt;Once the trigger is written down, wiring it up is the easy part. I covered a working setup in &lt;a href="https://dev.to/akashrajpurohit/build-a-daily-feed-of-recently-funded-companies-without-writing-code-2b26"&gt;Build a daily feed of recently funded companies without writing code&lt;/a&gt;, and the data quality issues that quietly corrupt these pipelines in &lt;a href="https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3"&gt;Four traps that quietly break funding data pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to sanity check your filter against real volume before committing, the &lt;a href="https://apify.com/datahyena/company-funding-rounds" rel="noopener noreferrer"&gt;Datahyena funding rounds actor&lt;/a&gt; runs without signup and shows you how many companies a given filter actually returns per day. Worth doing before you promise a rep a feed.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://datahyena.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=trigger" rel="noopener noreferrer"&gt;Datahyena&lt;/a&gt;, a self-serve API for funding, acquisition and executive-move signals.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sales</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>Build a daily feed of recently funded companies without writing code</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:15:33 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/build-a-daily-feed-of-recently-funded-companies-without-writing-code-2b26</link>
      <guid>https://dev.to/akashrajpurohit/build-a-daily-feed-of-recently-funded-companies-without-writing-code-2b26</guid>
      <description>&lt;p&gt;Companies that just raised are the easiest prospects to justify reaching out to. They have budget, a mandate to spend it, and a public reason to take your call.&lt;/p&gt;

&lt;p&gt;The problem is timing. Everyone in your category reads the same announcements, so the inbox floods within a week. If you are compiling the list by hand on Mondays, you are already late.&lt;/p&gt;

&lt;p&gt;Here is how to make it run daily instead. No code, about fifteen minutes to set up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of it
&lt;/h2&gt;

&lt;p&gt;Four steps, and they are the same whichever data source you use.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull on a schedule.&lt;/strong&gt; Daily, not weekly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter at the source&lt;/strong&gt;, so you are not paying for or sorting through rows you will throw away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep a cursor&lt;/strong&gt;, so each run returns only what is new. Skip this and you will re-import the same companies every day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route it&lt;/strong&gt; to wherever your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Setting it up
&lt;/h2&gt;

&lt;p&gt;I will use the &lt;a href="https://apify.com/datahyena/company-funding-rounds" rel="noopener noreferrer"&gt;Datahyena funding rounds actor&lt;/a&gt; on Apify because it is pay per record and needs no signup, so you can test the whole thing before deciding anything. The pattern works with any provider.&lt;/p&gt;

&lt;p&gt;Open the actor and set your filter. Mine looks 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;"countries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"DE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FI"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"round"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"seed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"series-a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"series-b"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minAmountUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"since"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&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;Read that as: seed through Series B, at least $2M, in the markets I can actually sell into.&lt;/p&gt;

&lt;p&gt;Be stricter than feels comfortable. A good filter returns a handful of companies a day that a rep is glad to see. If it returns two hundred, it is not a trigger, it is a list, and nobody will work it.&lt;/p&gt;

&lt;p&gt;Save it as a task, then use &lt;a href="https://docs.apify.com/platform/schedules" rel="noopener noreferrer"&gt;Apify's scheduler&lt;/a&gt; to run it every morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Only getting what is new
&lt;/h2&gt;

&lt;p&gt;Each run writes a &lt;code&gt;NEXT_CURSOR&lt;/code&gt; to its key value store. Pass that as the &lt;code&gt;cursor&lt;/code&gt; input on the next run and you pick up exactly where the last one stopped.&lt;/p&gt;

&lt;p&gt;This is the step people skip, and it is why their reps end up seeing the same five companies all week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting it to your team
&lt;/h2&gt;

&lt;p&gt;Apify can post results to a webhook when a run finishes, which gives you three easy options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Straight to CRM.&lt;/strong&gt; HubSpot and Salesforce both accept inbound webhooks, or use their Zapier connectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Into n8n or Make.&lt;/strong&gt; More control. Enrich, score, then create the record and start a sequence. There is an &lt;a href="https://www.npmjs.com/package/n8n-nodes-datahyena" rel="noopener noreferrer"&gt;n8n community node&lt;/a&gt; if you want to skip the HTTP wiring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Into Slack.&lt;/strong&gt; Underrated. A channel that posts three or four funded companies each morning gets read. A CRM view often does not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row comes back with the company, amount, stage, date, and investors, which is enough to write an opener that is actually specific to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  One thing to watch
&lt;/h2&gt;

&lt;p&gt;Not every announcement states every detail. Around a fifth never say what stage the round was, and a quarter of companies have no HQ country on record anywhere public.&lt;/p&gt;

&lt;p&gt;That matters because most filters silently drop records where the field is empty. If you filter to Germany, companies whose HQ was never published vanish from your results, and you will assume there was nothing to find. Check whether your tool lets you include the unknowns. In the actor above it is the &lt;strong&gt;Not disclosed&lt;/strong&gt; option on the country, industry, and round filters.&lt;/p&gt;

&lt;p&gt;I wrote more on that failure mode and three others in &lt;a href="https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3"&gt;Four traps that quietly break funding data pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start narrow
&lt;/h2&gt;

&lt;p&gt;Pick one segment, set a tight filter, run it for two weeks and read every row yourself before it reaches a rep. You will learn more about your trigger in those two weeks than from any amount of planning, and the list is still small enough to check by hand.&lt;/p&gt;

&lt;p&gt;Widening it later is easy. Getting it right at scale from day one is not.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://datahyena.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=daily-feed" rel="noopener noreferrer"&gt;Datahyena&lt;/a&gt;, a self-serve API for funding, acquisition and executive-move signals. The setup above works with any provider.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>automation</category>
      <category>sales</category>
      <category>api</category>
    </item>
    <item>
      <title>Four traps that quietly break funding data pipelines</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 07 Aug 2026 14:13:46 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3</link>
      <guid>https://dev.to/akashrajpurohit/four-traps-that-quietly-break-funding-data-pipelines-1fm3</guid>
      <description>&lt;p&gt;If you run outbound off funding announcements, you have probably built some version of this: pull new rounds, filter to your segment, push to the CRM.&lt;/p&gt;

&lt;p&gt;It works, and then it quietly stops working. Not with an error. The job keeps running and the numbers look normal, but the list gets worse. Here are the four failure modes I see most, and how to check for each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Announced is not the same as closed
&lt;/h2&gt;

&lt;p&gt;A lot of funding coverage is written before the money lands. Headlines like "X is raising $20M" or "X in talks to raise" describe a negotiation, not a completed round. Some outlets report the intent, the close, and the final number as three separate stories.&lt;/p&gt;

&lt;p&gt;If those get into your pipeline, a rep congratulates someone on money they do not have yet. That is a bad first impression, and it is avoidable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; scan your last hundred rows for titles containing "to raise", "raising", "in talks", or "seeks". If you find any, your source is not filtering them out.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Filters silently hide records
&lt;/h2&gt;

&lt;p&gt;This is the expensive one, because it looks like a coverage problem when it is actually a query problem.&lt;/p&gt;

&lt;p&gt;Most systems drop a record when the field you are filtering on is empty. Filter by country, and every company whose HQ was never stated disappears from the result. You see two deals in a market where there were twelve, conclude the source has no coverage there, and stop using it.&lt;/p&gt;

&lt;p&gt;In SQL terms, &lt;code&gt;WHERE country IN ('DE','FR')&lt;/code&gt; excludes every row where country is &lt;code&gt;NULL&lt;/code&gt;. Nothing warns you. The same thing happens inside most data tools and UIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; before you trust an empty result, ask how many records have that field at all. If a quarter of rows have no country, a country filter is hiding a quarter of your data. Good tools let you include the unknowns explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Stage is often not disclosed
&lt;/h2&gt;

&lt;p&gt;Roughly a fifth of funding announcements never say what stage the round was. The press release says "raised $4M" and nothing else.&lt;/p&gt;

&lt;p&gt;If your trigger filters on seed through Series B, those deals are gone. Not deprioritised, gone. And they are not junk. Plenty of them are exactly the companies you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; run your filter with and without the stage condition and compare the counts. If the gap is large, decide deliberately whether you want the undisclosed ones rather than losing them by accident.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. One round, many articles
&lt;/h2&gt;

&lt;p&gt;A single round gets covered by a dozen outlets, often with slightly different numbers. One says $5M, another says €4.6M, a third rounds to $5 million.&lt;/p&gt;

&lt;p&gt;If your source gives you one row per article, your reps see the same company several times and stop trusting the list. Worse, your dedupe logic probably keys on company plus amount, so the differing figures survive as separate rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; count distinct companies against total rows for a single week. If the ratio is well below one, you have duplicates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than coverage
&lt;/h2&gt;

&lt;p&gt;Teams evaluate funding data on breadth. How many rounds, how many countries. That is the easy question.&lt;/p&gt;

&lt;p&gt;The harder one is whether the rows that reach a rep are ones a rep can act on. A smaller, correct feed beats a bigger one with unclosed rounds, hidden segments, and triplicates in it, because reps stop opening a list they have been burned by.&lt;/p&gt;

&lt;p&gt;If you are building this, the same four checks apply whichever provider you use. I work on &lt;a href="https://datahyena.com?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=traps" rel="noopener noreferrer"&gt;Datahyena&lt;/a&gt;, which handles these four cases directly, and you can see the shape of the data in the &lt;a href="https://apify.com/datahyena/company-funding-rounds" rel="noopener noreferrer"&gt;funding rounds actor on Apify&lt;/a&gt; without signing up for anything. The &lt;a href="https://datahyena.com/docs?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_content=traps" rel="noopener noreferrer"&gt;API docs&lt;/a&gt; show the filter behaviour if you want to compare against what you use today.&lt;/p&gt;

&lt;p&gt;For the wider trigger design question, Lenny Rachitsky's writing on &lt;a href="https://www.lennysnewsletter.com/" rel="noopener noreferrer"&gt;buying signals&lt;/a&gt; and the &lt;a href="https://www.sec.gov/edgar/search/" rel="noopener noreferrer"&gt;SEC EDGAR Form D data&lt;/a&gt; are both good starting points, the latter being free if you only need US rounds and can tolerate the lag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/akashrajpurohit/your-funding-trigger-is-probably-too-broad-l9"&gt;Your funding trigger is probably too broad&lt;/a&gt;, on defining the filter before you build anything.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/akashrajpurohit/build-a-daily-feed-of-recently-funded-companies-without-writing-code-2b26"&gt;Build a daily feed of recently funded companies without writing code&lt;/a&gt;, a worked setup.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/akashrajpurohit/where-to-get-startup-funding-data-and-what-each-option-actually-costs-you-54ge"&gt;Where to get startup funding data&lt;/a&gt;, the five sourcing options compared.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/akashrajpurohit/post-new-funding-rounds-to-slack-every-morning-with-n8n-3bej"&gt;Post new funding rounds to Slack every morning with n8n&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>data</category>
      <category>sales</category>
      <category>startup</category>
    </item>
    <item>
      <title>Getting paid in foreign currency as a software developer in India</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 21 Feb 2025 11:24:01 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/getting-paid-in-foreign-currency-as-a-software-developer-in-india-13j7</link>
      <guid>https://dev.to/akashrajpurohit/getting-paid-in-foreign-currency-as-a-software-developer-in-india-13j7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As the world becomes increasingly remote-first, more Indian software developers are finding opportunities to work with clients and companies based outside India. While this opens up exciting possibilities for career growth and better compensation, it also comes with its own set of challenges - particularly around receiving payments and staying compliant with Indian regulations.&lt;/p&gt;

&lt;p&gt;After spending considerable time researching this topic, going through countless blogs, Reddit threads, and discussions with fellow developers and professionals, I realized there wasn't a comprehensive guide that addressed all aspects of receiving foreign income as an Indian developer. This blog post aims to fill that gap.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article is based on my personal research and experience. While I strive to provide accurate information, I am not a Chartered Accountant (CA) or tax expert.&lt;/p&gt;

&lt;p&gt;Tax laws and regulations can change, and individual situations may vary. Please consult with a qualified CA or tax professional for advice specific to your situation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Receiving Payments from Foreign Clients
&lt;/h2&gt;

&lt;p&gt;One of the first challenges you'll face is deciding how to receive payments from foreign clients. The reason why this is a challenge and tricky thing to do is because you are dealing with foreign currency and at the end of the day, you need to convert that foreign currency to Indian Rupees.&lt;/p&gt;

&lt;p&gt;If you are doing this less frequently then maybe you don't need to worry much about this, but if you are going to be receiving payments from foreign clients on a regular basis then you need to find a way to optimize this process as much as possible.&lt;/p&gt;

&lt;p&gt;The reason is simple, a small difference in currency exchange rates, transaction fees, bank charges and processing fees and time can add up to a significant amount of money over time (as much as &lt;strong&gt;4-5% of the total amount&lt;/strong&gt; which can be a lot depending on your volume of transactions).&lt;/p&gt;

&lt;p&gt;With that being said, let's look at the options available to you.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Direct Wire Transfer (with SWIFT code)
&lt;/h3&gt;

&lt;p&gt;The traditional method of receiving foreign payments directly to your bank account. How this process works is that you will open a current account in your name which has global trade account setup.&lt;/p&gt;

&lt;p&gt;Once that is done, you will be provided with the account number and the SWIFT code of the bank. You can then use this information to receive payments from your foreign clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No intermediary fees&lt;/li&gt;
&lt;li&gt;Direct deposit to your bank&lt;/li&gt;
&lt;li&gt;Transparent process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High transfer fees (both sender and receiver)&lt;/li&gt;
&lt;li&gt;Poor exchange rates&lt;/li&gt;
&lt;li&gt;Longer processing time&lt;/li&gt;
&lt;li&gt;Complex documentation requirements&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;To find what exchange rate you will be getting from different banks, search for "&lt;strong&gt;TT buying rate bank-name&lt;/strong&gt;" on Google. Each bank releases their daily exchange rates on their website. Check the rates for your foreign currency and see how much less than the market rate you will be getting.&lt;/p&gt;

&lt;p&gt;Now, coming back to the reality, what you can do instead is you can go to the bank, talk to the manager (or any representative who handles the foreign income transactions) and ask them for a better rate. Based on the volume of the transaction you plan to do, they might give you a better rate.&lt;/p&gt;

&lt;p&gt;So if you are planning to do it via this way, then I would highly recommend that you talk and get the best rate possible. You can even get &lt;strong&gt;15-20 paise&lt;/strong&gt; less than the current market rate if you are doing a large volume of transactions. To compare this with standard market rate, you might be getting &lt;strong&gt;1-1.5 rupees&lt;/strong&gt; less than the market rate which is awfully low by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Skydo
&lt;/h3&gt;

&lt;p&gt;A relatively new player in the market, &lt;a href="https://go.akashrajpurohit.com/a/skydo" rel="noopener noreferrer"&gt;Skydo&lt;/a&gt; is designed for Indian freelancers and agencies receiving foreign payments.&lt;/p&gt;

&lt;p&gt;Few things that I found quite interesting about them is firstly they give you the live FX rates (which means that what you see is what you get) and their pricing model is very simple with a flat fee based on the amount of money you are receiving which makes it very transparent and easy to understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Competitive exchange rates&lt;/li&gt;
&lt;li&gt;Lower fees compared to traditional banks&lt;/li&gt;
&lt;li&gt;Designed specifically for Indian businesses&lt;/li&gt;
&lt;li&gt;Quick setup and easy documentation&lt;/li&gt;
&lt;li&gt;Direct integration with accounting software&lt;/li&gt;
&lt;li&gt;Excellent customer support (I can vouch for this personally)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited to specific countries&lt;/li&gt;
&lt;li&gt;Relatively new service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The flow will look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will be provided with a virtual bank account number depending on the currency and country you are receiving the payment from.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if you are receiving the payment from the USA, you will be provided with a USA bank account number, ACH / Fedwire details etc.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transfer the money to your Skydo account using those details.&lt;/li&gt;
&lt;li&gt;Link your Indian bank account to your Skydo account by providing the account number and IFSC code.&lt;/li&gt;
&lt;li&gt;Once you receive the payment, you will be able to see the amount in your Skydo dashboard which will get converted and transferred to your Indian bank account.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Wise (Formerly TransferWise)
&lt;/h3&gt;

&lt;p&gt;A popular modern solution for international transfers. This was probably the first one that comes into mind when you think about receiving payments from foreign clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better exchange rates than banks&lt;/li&gt;
&lt;li&gt;Lower fees&lt;/li&gt;
&lt;li&gt;Transparent pricing&lt;/li&gt;
&lt;li&gt;Multiple currency support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May require additional documentation&lt;/li&gt;
&lt;li&gt;Some banks may have issues with Wise transfers&lt;/li&gt;
&lt;li&gt;Not all countries supported&lt;/li&gt;
&lt;li&gt;Recently their sign up process has become quite of a hassle for indian users and hence I have not been able to test it out myself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. PayPal
&lt;/h3&gt;

&lt;p&gt;While popular globally, PayPal might not be the best option for Indian recipients for larger amounts but it is still a good option to consider for smaller and infrequent transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Widely accepted&lt;/li&gt;
&lt;li&gt;Easy to set up&lt;/li&gt;
&lt;li&gt;Good for small amounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High fees (from my personal experience its the worst, even compared to the direct wire transfer)&lt;/li&gt;
&lt;li&gt;Poor exchange rates&lt;/li&gt;
&lt;li&gt;Funds can be held without notice&lt;/li&gt;
&lt;li&gt;Withdrawal to Indian banks can be slow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding Tax Implications
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Section 44ADA: A Blessing for Professionals
&lt;/h3&gt;

&lt;p&gt;If your gross receipts are under ₹75 lakhs per year, Section 44ADA of the Income Tax Act can be particularly beneficial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key points about 44ADA:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Presumptive Taxation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50% of your gross receipts are considered as profit&lt;/li&gt;
&lt;li&gt;Remaining 50% is assumed as business expenses&lt;/li&gt;
&lt;li&gt;No need to maintain detailed books of accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Eligibility:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applicable to professionals (including software developers)&lt;/li&gt;
&lt;li&gt;Gross receipts should not exceed ₹75 lakhs in a financial year (provided 95% of the income is via online mode and not cash)&lt;/li&gt;
&lt;li&gt;Only available to individuals and partnership firms (not companies)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified tax filing&lt;/li&gt;
&lt;li&gt;No need for audit&lt;/li&gt;
&lt;li&gt;Can still claim actual expenses if they're lower than 50%&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Beyond ₹75 Lakhs: Regular Taxation
&lt;/h3&gt;

&lt;p&gt;If your income exceeds ₹75 lakhs, you'll need to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintain Books of Accounts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regular books of accounts required&lt;/li&gt;
&lt;li&gt;Need professional help (CA) for maintenance&lt;/li&gt;
&lt;li&gt;Annual audit mandatory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Actual Expense Deduction:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can claim actual business expenses&lt;/li&gt;
&lt;li&gt;Need to maintain proper documentation&lt;/li&gt;
&lt;li&gt;Common deductible expenses include:

&lt;ul&gt;
&lt;li&gt;Home office expenses&lt;/li&gt;
&lt;li&gt;Internet and phone bills&lt;/li&gt;
&lt;li&gt;Computer equipment and software&lt;/li&gt;
&lt;li&gt;Professional development courses&lt;/li&gt;
&lt;li&gt;Travel expenses (if applicable)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;One important thing to note here is that you need to make sure whatever platform you use, it is compliant with the Indian regulations and laws and also that you are receiving FIRA/FIRC document from the bank for each of your transactions.&lt;/p&gt;

&lt;p&gt;This document is required by the Indian government to prove that the money you are receiving is from a foreign source and not from an Indian source and will be very much needed when you file your taxes and want to claim the foreign income under 44ADA.&lt;/p&gt;

&lt;p&gt;PS: With &lt;a href="https://go.akashrajpurohit.com/a/skydo" rel="noopener noreferrer"&gt;Skydo&lt;/a&gt;, you don't need to worry about this as they will provide you with the FIRA document for each of your transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  GST Registration and Compliance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When to Register for GST
&lt;/h3&gt;

&lt;p&gt;GST registration is mandatory if you're providing services to foreign clients (considered as export of services) and you are earning more than 20 lakhs in a financial year.&lt;/p&gt;

&lt;p&gt;While you will be registering for GST, you need not worry about charging your foreign clients for the GST as it will be zero rated for you. To enable this you will be applying for the LUT (Letter of Undertaking) from the GST portal for every financial year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key points about GST:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Registration Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mandatory regardless of turnover for export services&lt;/li&gt;
&lt;li&gt;Need to register in the state where you're based&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation Needed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PAN card&lt;/li&gt;
&lt;li&gt;Aadhaar card&lt;/li&gt;
&lt;li&gt;Bank account details&lt;/li&gt;
&lt;li&gt;Address proof&lt;/li&gt;
&lt;li&gt;Passport size photograph&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GST Compliance Requirements
&lt;/h3&gt;

&lt;p&gt;Once registered, you need to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Regular Returns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GSTR-1 (monthly/quarterly)&lt;/li&gt;
&lt;li&gt;GSTR-3B (monthly/quarterly)&lt;/li&gt;
&lt;li&gt;Annual returns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Maintain Records:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoices&lt;/li&gt;
&lt;li&gt;Payment receipts&lt;/li&gt;
&lt;li&gt;Bank statements&lt;/li&gt;
&lt;li&gt;Other relevant documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Zero-rated Supply:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Export of services is considered zero-rated&lt;/li&gt;
&lt;li&gt;No GST charged to foreign clients&lt;/li&gt;
&lt;li&gt;Can claim input tax credit&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider using accounting software that supports GST compliance and can generate GST-compliant invoices. This will save you significant time and reduce errors in compliance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Best Practices and Tips
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Separate Bank Account:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintain a separate bank account for business transactions&lt;/li&gt;
&lt;li&gt;Makes accounting and tax filing easier&lt;/li&gt;
&lt;li&gt;Better tracking of income and expenses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep all client agreements in writing&lt;/li&gt;
&lt;li&gt;Maintain proper invoices&lt;/li&gt;
&lt;li&gt;Document all business expenses&lt;/li&gt;
&lt;li&gt;Keep foreign inward remittance certificates (FIRC)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Professional Help:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engage a CA for tax planning and compliance&lt;/li&gt;
&lt;li&gt;Consider using professional accounting software&lt;/li&gt;
&lt;li&gt;Stay updated with regulatory changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Currency Management:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consider maintaining a multi-currency account&lt;/li&gt;
&lt;li&gt;Plan for currency fluctuations&lt;/li&gt;
&lt;li&gt;Use forward contracts if dealing with large amounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regular Compliance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File returns on time&lt;/li&gt;
&lt;li&gt;Pay advance tax if applicable&lt;/li&gt;
&lt;li&gt;Keep track of important dates and deadlines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tools and Resources
&lt;/h2&gt;

&lt;p&gt;Here are some tools and resources that can help you manage your finances better:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment Platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://go.akashrajpurohit.com/a/skydo" rel="noopener noreferrer"&gt;Skydo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wise.com" rel="noopener noreferrer"&gt;Wise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.paypal.com/business" rel="noopener noreferrer"&gt;PayPal Business&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tax Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.incometax.gov.in/" rel="noopener noreferrer"&gt;Income Tax Portal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gst.gov.in/" rel="noopener noreferrer"&gt;GST Portal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Working with foreign clients can be rewarding both professionally and financially. While the initial setup and compliance requirements might seem overwhelming, with proper planning and professional help, you can create a smooth system for managing your international income.&lt;/p&gt;

&lt;p&gt;Remember to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose the right payment platform&lt;/li&gt;
&lt;li&gt;Understand your tax obligations&lt;/li&gt;
&lt;li&gt;Stay compliant with GST requirements&lt;/li&gt;
&lt;li&gt;Maintain proper documentation&lt;/li&gt;
&lt;li&gt;Seek professional help when needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have you been working with foreign clients? What challenges have you faced? Share your experiences in the comments below, or reach out to me on &lt;a href="https://twitter.com/akashwhocodes" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; / &lt;a href="https://www.reddit.com/user/Developer_Akash/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy freelancing! 🚀&lt;/p&gt;

</description>
      <category>finance</category>
      <category>developer</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Increase Swap Memory on Raspberry Pi</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Sat, 24 Feb 2024 07:01:30 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/increase-swap-memory-on-raspberry-pi-m6</link>
      <guid>https://dev.to/akashrajpurohit/increase-swap-memory-on-raspberry-pi-m6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A Swap file is a file on the disk that can be used to extend the RAM on your system. It is used when the RAM is full and your system needs more memory resources. It is also used to store the data that is not accessed frequently.&lt;/p&gt;

&lt;p&gt;This is especially useful on Raspberry Pi with limited amount of RAM. For example, I have a Raspberry Pi Zero 2W which has 512MB of RAM. When I started adding more services on it, I could see with &lt;a href="https://akashrajpurohit.com/blog/mastering-process-monitoring-and-management-with-htop-command-in-linux/?ref=dev.to-blog"&gt;&lt;code&gt;htop&lt;/code&gt;&lt;/a&gt; that the RAM is becoming almost full. This is where the swap file comes in handy.&lt;/p&gt;

&lt;p&gt;The default swap file size on Raspberry Pi is 100MB. This is might be enough for some use cases, but if you need more, you can increase it.&lt;/p&gt;

&lt;p&gt;Let's see how to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Increase Swap Memory
&lt;/h2&gt;

&lt;p&gt;We will use the &lt;code&gt;dphys-swapfile&lt;/code&gt; package to increase the swap memory. This package is installed by default on Raspberry Pi OS. If you don't have it installed, you can install it with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;dphys-swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First thing to do it to turn off the swap file to avoid any issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dphys-swapfile swapoff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we will update the &lt;code&gt;CONF_SWAPSIZE&lt;/code&gt; variable in the &lt;code&gt;/etc/dphys-swapfile&lt;/code&gt; file. This variable is used to set the size of the swap file. The default value is 100MB. We will set it to 500MB&lt;/p&gt;

&lt;p&gt;I am using &lt;code&gt;vi&lt;/code&gt; to edit the file, but you can use any editor you like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vi /etc/dphys-swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search for the &lt;code&gt;CONF_SWAPSIZE&lt;/code&gt; variable and update it to &lt;code&gt;500&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONF_SWAPSIZE=500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and exit the editor.&lt;/p&gt;

&lt;p&gt;Now we will reinitialize the swap file setup using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dphys-swapfile setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we will turn on the swap file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dphys-swapfile swapon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once this is done, we can reboot the system to make sure everything is working fine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the reboot, you can check the swap file size using the &lt;code&gt;htop&lt;/code&gt; command and check for the &lt;code&gt;Swp&lt;/code&gt; value, it should be &lt;code&gt;500M&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One thing to note is if you want to increase the swap file size to more than &lt;code&gt;2GB&lt;/code&gt; then you would need to uncomment the &lt;code&gt;CONF_MAXSWAP&lt;/code&gt; variable in the &lt;code&gt;/etc/dphys-swapfile&lt;/code&gt; file and set it to the desired value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have personally never needed it, but if you do, then you can do it (not verified by me).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this post, we saw how to increase the swap memory on Raspberry Pi. This can be useful if you are running out of RAM on your Raspberry Pi.&lt;/p&gt;

&lt;p&gt;I hope you liked this post. If you have any questions or feedback, reach out to me on &lt;a href="https://twitter.com/AkashWhoCodes"&gt;X / Twitter&lt;/a&gt; or follow my blog at &lt;a href="https://akashrajpurohit.com/?ref=dev.to-blog"&gt;akashrajpurohit.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you in the next post. Until then, keep HomeLabbing! 👋&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>homelab</category>
      <category>linux</category>
    </item>
    <item>
      <title>Fix Sudo not asking Password on Raspberry Pi</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Sat, 24 Feb 2024 06:54:04 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/fix-sudo-not-asking-password-on-raspberry-pi-kmi</link>
      <guid>https://dev.to/akashrajpurohit/fix-sudo-not-asking-password-on-raspberry-pi-kmi</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When you install a fresh copy of Debian or Raspbian on your Raspberry Pi you might notice that sudo does not ask for a password. This is a security risk and should be fixed. Let's see how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix Sudo not asking Password on Raspberry Pi
&lt;/h2&gt;

&lt;p&gt;This happens due to the &lt;code&gt;NOPASSWD&lt;/code&gt; option for your user. We need to make sure that this option is not set.&lt;/p&gt;

&lt;p&gt;We will edit the file named &lt;code&gt;010_pi-nopasswd&lt;/code&gt;. To find its location we will use the &lt;a href="https://dev.to/blog/mastering-the-art-of-file-and-directory-search-with-linuxs-find-command/"&gt;&lt;code&gt;find&lt;/code&gt;&lt;/a&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;find / &lt;span class="nt"&gt;-name&lt;/span&gt; 010_pi-nopasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return the location of the file. In my case it is &lt;code&gt;/etc/sudoers.d/010_pi-nopasswd&lt;/code&gt;. Now we will edit this file using &lt;code&gt;visudo&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;visudo /etc/sudoers.d/010_pi-nopasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current content on the file will look like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&amp;lt;username&amp;gt; &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: ALL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; is your username. We need to remove the &lt;code&gt;NOPASSWD&lt;/code&gt; option. So the file will look like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&amp;lt;username&amp;gt; &lt;span class="nv"&gt;ALL&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;ALL&lt;span class="o"&gt;)&lt;/span&gt; ALL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and exit. Now when you run &lt;code&gt;sudo&lt;/code&gt; it will ask for a password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We looked into how to fix sudo not asking password on Raspberry Pi. This is a security risk and should be fixed.&lt;/p&gt;

&lt;p&gt;Follow my blog at &lt;a href="https://akashrajpurohit.com/?ref=dev.to-blog"&gt;akashrajpurohit.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>homelab</category>
    </item>
    <item>
      <title>How to use ES6 import syntax in Node.js</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Fri, 09 Jul 2021 13:52:39 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/how-to-use-es6-import-syntax-in-node-js-2oak</link>
      <guid>https://dev.to/akashrajpurohit/how-to-use-es6-import-syntax-in-node-js-2oak</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A module is a JavaScript files that can export one or more values. These values can be variables, objects, or even functions.&lt;/p&gt;

&lt;p&gt;JavaScript does not have built-in support for modules, but the community has created impressive work-arounds. The two most important standards are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CommonJs Modules&lt;/strong&gt; - What we know as the &lt;code&gt;require()&lt;/code&gt; method for importing modules and &lt;code&gt;module.exports&lt;/code&gt; for exporting. This is designed for synchronous loading and mainly used for server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asynchronous Module Definition (AMD)&lt;/strong&gt; - The most popular implementation of this standard is &lt;a href="https://requirejs.org/"&gt;RequireJS&lt;/a&gt;. This is designed for asynchronous loading and mainly used for browsers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ES6 Import
&lt;/h2&gt;

&lt;p&gt;The goal for ECMAScript 6 modules was to create a format that both users of CommonJS and of AMD are happy with. The syntax for importing modules looks like this..&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// for default imports&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;foo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// for named imports&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and exporting with named and default exports like this..&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MAX_USERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Named exports&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sayHi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hi &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;sayHi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Default export&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;If you try to run this code directly then you would get an error something like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;SyntaxError: Cannot use import statement outside a module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, if you are using Node.js version 14.x.x or above then the simplest fix is to add "type": "module" in your package.json file.&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&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;However if you are on any version below 14, you would have to use Babel to compile your code before running it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: Babel is not framework or platform opinionated. This means that it can be used in any project that is written in JavaScript and thus, in a Node.js project as well.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start by installing some dev dependencies,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add &lt;span class="nt"&gt;-D&lt;/span&gt; @babel/core @babel/preset-env @babel/node

&lt;span class="c"&gt;# OR&lt;/span&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @babel/core @babel/preset-env @babel/node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next is to create a &lt;code&gt;babel.config.json&lt;/code&gt; file and add the following config,&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;"presets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@babel/preset-env"&lt;/span&gt;&lt;span class="p"&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;Now you just have to use &lt;code&gt;babel-node&lt;/code&gt; instead of node, so your start/dev script may look like this now&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;"scripts"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nodemon --exec babel-node server.js"&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;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;Hope this was helpful. See you in another one 👋&lt;/p&gt;

</description>
      <category>node</category>
      <category>es6</category>
      <category>import</category>
      <category>module</category>
    </item>
    <item>
      <title>Increase Root Partition Size On Fedora</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Mon, 01 Mar 2021 14:38:05 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/increase-root-partition-size-on-fedora-48e1</link>
      <guid>https://dev.to/akashrajpurohit/increase-root-partition-size-on-fedora-48e1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I recently was in the need of extending the root partition size on my system and spent quite some time figuring out the approach to follow in doing so without losing data.&lt;/p&gt;

&lt;p&gt;My scenario was I wanted to shrink the /home partition and use that space to increase root partition size. In this blog, I will be sharing how I was able to do the same quickly as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup, Backup, and Backup
&lt;/h2&gt;

&lt;p&gt;Always take a backup before shrinking/expanding or doing any configurations on your partitions. If you already have backups in your place then you are good to go, but If you don't then you can follow along from this tutorial to &lt;a href="https://akashrajpurohit.com/blog/backup-users-home-directory-in-linux-using-tar-command/"&gt;create a backup using tar command&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now if you already have enough space, you can skip the next step of shrinking any partition to get the space available. Although in my case, I did not have extra space, I had to shrink it from the home directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shrink Home
&lt;/h2&gt;

&lt;p&gt;There are some prerequisites before we start the shrinking process.&lt;/p&gt;

&lt;p&gt;To follow along, the first thing that you want to do is to switch yourself to the root user. And by switching means logging out from your non-root user and login in with username as root and your root password.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You have to go into root user because your non-root (the current user) would be mounting the home directory, so for shrinking, you would have to unmount the home partition but since some processes might be using this partition it might throw you the error like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Do you want to unmount &lt;span class="s2"&gt;"/home"&lt;/span&gt; ? &lt;span class="o"&gt;[&lt;/span&gt;Y|n] y
umount: /home: target is busy.
fsadm: Cannot proceed with mounted filesystem &lt;span class="s2"&gt;"/home"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
  /usr/sbin/fsadm failed: 1
  Filesystem resize failed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check if the target is busy or not using the &lt;code&gt;fuser -mv /dev/mapper/fedora_localhost--live-home&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Remember you can check where your fedora &lt;code&gt;root&lt;/code&gt; and &lt;code&gt;home&lt;/code&gt; partition is mounted using &lt;code&gt;fdisk -l&lt;/code&gt; command. In my case it is fedora_localhost--live-root and fedora_localhost--live-home)&lt;/p&gt;

&lt;p&gt;Now to shrink this partition we will use &lt;code&gt;lvresize&lt;/code&gt; tool.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lvresize &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-20G&lt;/span&gt; &lt;span class="nt"&gt;--resizefs&lt;/span&gt; /dev/mapper/fedora_localhost--live-home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will shrink 20Gb from home.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extend Root Partition
&lt;/h2&gt;

&lt;p&gt;Now you can see available space using the &lt;code&gt;vgs&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vgs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output will be like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  VG                    &lt;span class="c"&gt;#PV #LV #SN Attr   VSize     VFree&lt;/span&gt;
  fedora_localhost-live   1   3   0 wz--n- 475.35g    20g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can add this extra space into the root using the same &lt;code&gt;lvresize&lt;/code&gt; tool. But now instead of -20G we will add +20G to root.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lvresize &lt;span class="nt"&gt;-L&lt;/span&gt; +20G &lt;span class="nt"&gt;--resizefs&lt;/span&gt; /dev/mapper/fedora_localhost--live-root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it, reboot your system and login with your normal non-root user and you would have your root size increased.&lt;/p&gt;

&lt;p&gt;Hope this helped you. See you in the next one.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>root</category>
      <category>partiton</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Backup Users Home Directory In Linux Using Tar Command</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Mon, 01 Mar 2021 12:33:59 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/backup-users-home-directory-in-linux-using-tar-command-4ehe</link>
      <guid>https://dev.to/akashrajpurohit/backup-users-home-directory-in-linux-using-tar-command-4ehe</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;We often need to do things that may put us at risk of losing data in Linux, nevertheless, it's always better to take systematic backups from time to time.&lt;/p&gt;

&lt;p&gt;Today we will be learning about how to use the powerful tool called &lt;code&gt;tar&lt;/code&gt; in Linux to help in the backup process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tar Command
&lt;/h2&gt;

&lt;p&gt;Let's take a quick look at the tar command and the flags that we will be using with it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-zcvpf&lt;/span&gt; /[Backup_Location]/[Backup_Filename] /[User_Home_Directory_Location]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's understand these flags.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;z : Compress the backup file with ‘gzip’ to make it a small size.&lt;/li&gt;
&lt;li&gt;c : Create a new backup archive.&lt;/li&gt;
&lt;li&gt;v : verbosely list files that are processed.&lt;/li&gt;
&lt;li&gt;p : Preserves the permissions of the files put in the archive for later restoration.&lt;/li&gt;
&lt;li&gt;f : use archive file or device ARCHIVE.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Let us now backup the home directory, in my case, the user name is &lt;code&gt;akash&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-zcvpf&lt;/span&gt; /backup/akash-backup-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%d-%m-%Y&lt;span class="si"&gt;)&lt;/span&gt;.tar.gz /home/akash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will produce the output (for the /backup directory) as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lh&lt;/span&gt; /backup

total 15G
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root 15G Mar  1 12:09 akash-backup-01-03-2021.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you wish to exclude some directory to be archived, you can use &lt;code&gt;--exclude&lt;/code&gt; flag, something like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;--exclude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'/home/akash/Documents/test-folder'&lt;/span&gt; &lt;span class="nt"&gt;-zcvpf&lt;/span&gt; /backup/akash-backup-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%d-%m-%Y&lt;span class="si"&gt;)&lt;/span&gt;.tar.gz /home/akash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will archive everything excluding the &lt;code&gt;test-folder&lt;/code&gt; inside Documents.&lt;/p&gt;

&lt;p&gt;And that's it, this will help you create a backup and store it with the date inside &lt;code&gt;/backup&lt;/code&gt; directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;Doing this once is fine, but what if there was a way to regularly backup your content and automatically wipe out the old backups, wouldn't that be great. So let's just do that.&lt;/p&gt;

&lt;p&gt;We will use a shell script and cron job to automate this task for us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup Script
&lt;/h2&gt;

&lt;p&gt;First, let's move into a better directory where we will store our script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /opt/scripts/home-dir-backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now copy the mentioned script, it is pretty straightforward.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;DATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%d-%m-%Y&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/backup"&lt;/span&gt;

&lt;span class="c"&gt;# To backup akash's home directory&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-zcvpf&lt;/span&gt; &lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;/akash-&lt;span class="nv"&gt;$DATE&lt;/span&gt;.tar.gz /home/akash

&lt;span class="c"&gt;# To delete files older than 15 days&lt;/span&gt;
find &lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nt"&gt;-mtime&lt;/span&gt; +15 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set executable permissions for this file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x home-dir-backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your script is ready to be used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cron Job
&lt;/h2&gt;

&lt;p&gt;The final step is to set up the cron job to run this script automatically. We will enter into crontab using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside it paste the following lines at the bottom.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;0 12 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; 5 /opt/scripts/home-dir-backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will run this script every Friday at 12:00. To learn more about how to configure these values, I would highly recommend using &lt;a href="https://crontab.guru/"&gt;crontab.guru&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope you found this helpful, see you in the next one.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tooling</category>
      <category>bash</category>
      <category>backups</category>
    </item>
    <item>
      <title>Top Free Services To Deploy Full-Stack Applications (Back-end, Front-end, Databases)</title>
      <dc:creator>Akash Rajpurohit</dc:creator>
      <pubDate>Sun, 14 Feb 2021 05:03:41 +0000</pubDate>
      <link>https://dev.to/akashrajpurohit/top-free-services-to-deploy-full-stack-applications-back-end-front-end-databases-3nmh</link>
      <guid>https://dev.to/akashrajpurohit/top-free-services-to-deploy-full-stack-applications-back-end-front-end-databases-3nmh</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;So you have developed a full-stack web application and now you are wondering how to take it online?&lt;/p&gt;

&lt;p&gt;Is it just a side project that you want to showcase or a small scale project to test it out with real users and get some feedback?&lt;/p&gt;

&lt;p&gt;One question you must be having is how can I get it done in the least cost possible right? Today we will see a list of amazing top services, using which you can easily go live with your project for &lt;strong&gt;FREE!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4trir8ognqx39krafhyg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4trir8ognqx39krafhyg.jpg" alt="Free Hosting Meme" width="565" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will see services for Back-end, Front-end, and even Databases 🤯. In the end, I'll drop in my personal choice and views regarding the same.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note - I am not being paid or sponsored by any of these services. This is just advice based on my experience as a freelancer, and on how I host my web applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Back-End
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Heroku
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.heroku.com/"&gt;Heroku&lt;/a&gt; is a PaaS i.e Platform as a Service, you can deploy your backend applications very quickly and easily on Heroku. They have a &lt;a href="https://www.heroku.com/pricing"&gt;free tier&lt;/a&gt; where you can run up to &lt;strong&gt;100 backend apps at the same time for free&lt;/strong&gt;. One catch is that you collectively have only &lt;strong&gt;1000 free dyno/app-hours per month&lt;/strong&gt; but its more than enough for a hobby or side project.&lt;/p&gt;

&lt;p&gt;Also, Heroku has a wide &lt;a href="https://elements.heroku.com/"&gt;variety of add-ons&lt;/a&gt; which makes this entire ecosystem very easy to use and setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Vercel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vercel.com/"&gt;Vercel or Formerly known as Zeit&lt;/a&gt; is another great option to deploy both Backend and Frontend applications, It uses &lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;serverless architecture&lt;/a&gt; to set up their infrastructure for deployment. Most people use vercel to deploy frontend applications but you can also deploy backend apps with vercel. This guide shows you &lt;a href="https://vercel.com/guides/deploying-a-mongodb-powered-api-with-node-and-vercel"&gt;how to deploy Node.js API with MongoDB on vercel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vercel has a very &lt;a href="https://vercel.com/pricing"&gt;generous free tier&lt;/a&gt; with these specs&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Pro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Serverless Functions Created per Deployment&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless Functions Created per Month&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;td&gt;640&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serverless Function Duration (Seconds)&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Firebase
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://firebase.google.com/"&gt;Firebase&lt;/a&gt; is not just a hosting service but a google backed product that provides lots of features along with hosting. Firebase gives you functionality like analytics, databases, messaging and crash reporting, etc.&lt;/p&gt;

&lt;p&gt;Along with hosting, many of the other services are also available in &lt;a href="https://firebase.google.com/pricing"&gt;free tier&lt;/a&gt; and as you scale up, you can go ahead with their Pay-as-you-Go model.&lt;/p&gt;

&lt;p&gt;You can host serverless functions called &lt;a href="https://firebase.google.com/docs/functions"&gt;Cloud Functions&lt;/a&gt;, however recently google has announced that to create functions that use Node.js version 10 and above, you have to &lt;a href="https://support.google.com/googleapi/answer/6158867?hl=en"&gt;enable billing&lt;/a&gt; for the account.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Fly.io
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fly.io/"&gt;Fly.io&lt;/a&gt; is a relatively new platform (founded in 2017) which has a &lt;a href="https://fly.io/docs/about/pricing/#free-for-side-projects"&gt;free tier&lt;/a&gt; to test out the platform or host small side projects. They give each user \$10/mo of service credit that automatically applies to any paid service.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;RAM&lt;/th&gt;
&lt;th&gt;Monthly (approx)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;micro-1x&lt;/td&gt;
&lt;td&gt;128MB&lt;/td&gt;
&lt;td&gt;$2.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;micro-2x&lt;/td&gt;
&lt;td&gt;512MB&lt;/td&gt;
&lt;td&gt;$8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can easily follow along with their &lt;a href="https://fly.io/docs/getting-started/installing-flyctl/"&gt;quickstart guide&lt;/a&gt; to set up the deployment workflow using their CLI tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Freemium IaaS
&lt;/h3&gt;

&lt;p&gt;I have clubbed together AWS, GCP, and Azure into this category. All three of these provide a free tier with a basic machine to set up for a year.&lt;/p&gt;

&lt;p&gt;Read more about their services in the free tier at&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/free/"&gt;Amazon Web Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/free/"&gt;Google Cloud Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-us/free"&gt;Azure&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These all are indeed good but sometimes can become too overwhelming for beginners by looking at their vast number of services and interconnection between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Front-End
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Netlify
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt; is an amazing service for hosting you static websites, you can easily &lt;strong&gt;host unlimited projects&lt;/strong&gt;, &lt;strong&gt;invoke serverless functions&lt;/strong&gt;, &lt;strong&gt;add a custom domain with HTTPS&lt;/strong&gt;, &lt;strong&gt;Store large files&lt;/strong&gt;, &lt;strong&gt;Preview Deploys&lt;/strong&gt; and &lt;a href="https://www.netlify.com/products/"&gt;many more&lt;/a&gt; for free.&lt;/p&gt;

&lt;p&gt;Recently Netlify also released &lt;a href="https://docs.netlify.com/configure-builds/build-plugins/"&gt;Plugins Ecosystem&lt;/a&gt; which allows you to customize your build process.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Vercel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt; as mentioned above, not only can be used to deploy backend APIs but in fact has a better ecosystem built to deploy static frontend applications. They have solutions for &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;Gatsby&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Vue&lt;/strong&gt;, &lt;strong&gt;Angular&lt;/strong&gt;, &lt;strong&gt;Nuxt&lt;/strong&gt; out of the box with &lt;strong&gt;Zero Configuration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vercel also provides Edge Network or &lt;a href="https://en.wikipedia.org/wiki/Content_delivery_network"&gt;Content Delivery Network&lt;/a&gt; and has multiple layers of caches to ensure that your Vercel deployments are fast around the world. You can read more about it on their &lt;a href="https://vercel.com/docs/introduction"&gt;docs section&lt;/a&gt; which in my opinion is nicely structured for better understanding.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Github Pages
&lt;/h3&gt;

&lt;p&gt;If you are a heavy user of GitHub and just want to quickly have a deployed version of your project then &lt;a href="https://pages.github.com/"&gt;Github Pages&lt;/a&gt; is the best choice for you. Github Pages host your code directly from your GitHub repository, so any changes/edits you make and push it to the repository are automatically pushed to your live website.&lt;/p&gt;

&lt;p&gt;Follow this &lt;a href="https://docs.github.com/en/github/working-with-github-pages"&gt;amazing guide by github&lt;/a&gt; to set up your next project using Github Pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Surge.sh
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://surge.sh/"&gt;Surge.sh&lt;/a&gt; is one of the simplest static site publishing providers. You can use their CLI tool to publish any project directly from the terminal or you could use its integration with various build tools like &lt;a href="https://surge.sh/help/deploying-a-grunt-project"&gt;Grunt&lt;/a&gt;, &lt;a href="https://github.com/surge-sh/gulp-surge"&gt;Gulp&lt;/a&gt;, &lt;a href="https://surge.sh/help/integrating-with-travis-ci"&gt;Travis CI&lt;/a&gt; and many more.&lt;/p&gt;

&lt;p&gt;Try out surge &lt;a href="https://surge.sh/pricing"&gt;free tier&lt;/a&gt; which is more than enough for any small to medium size front end application.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Render
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://render.com/"&gt;Render&lt;/a&gt; is another great service to host your both front end and back end applications and database, Although they don't have any free tier for back end and databases (&lt;em&gt;as of now&lt;/em&gt;) but they have a really good &lt;a href="https://render.com/pricing"&gt;free tier for static web hosting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The services are more or less similar to the other services mentioned above, so in the end, it all depends on your experience as a developer using these services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. MongoDB Atlas
&lt;/h3&gt;

&lt;p&gt;The company &lt;a href="https://www.mongodb.com/"&gt;MongoDB&lt;/a&gt; itself created this service called &lt;a href="https://www.mongodb.com/cloud/atlas"&gt;MongoDB Atlas&lt;/a&gt; and provides a really good free tier with &lt;strong&gt;512 MB of Storage&lt;/strong&gt;, &lt;strong&gt;Shared RAM&lt;/strong&gt; and &lt;strong&gt;Highly available replica sets, end-to-end encryption, automated patches, REST API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Previously, I was using &lt;a href="https://mlab.com/"&gt;mLab&lt;/a&gt; as Database-as-a-Service for most of my projects, but a few months back mLab was &lt;a href="https://blog.mlab.com/2018/10/mlab-is-becoming-a-part-of-mongodb-inc/"&gt;acquired by MongoDB&lt;/a&gt; and for the greater good, as MongoDB provides additional services and better security rules for your shared MongoDB Databases. There is no doubt that Atlas is the best Cloud Database you can get for rapid prototyping and small to medium-sized projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Elephant SQL
&lt;/h3&gt;

&lt;p&gt;When I am not using a NoSQL database like MongoDB and need an RDBMS database for any project, I mostly use &lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;. &lt;a href="https://www.elephantsql.com/"&gt;Elephant SQL&lt;/a&gt; is a great PostgreSQL as a Service for the cloud. Although they have a variety of plans for their service but their &lt;a href="https://www.elephantsql.com/plans.html"&gt;free tier&lt;/a&gt; is great for getting started with the PostgreSQL database in the cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Heroku Postgres
&lt;/h3&gt;

&lt;p&gt;As I have mentioned above in the Heroku section about the additional add-ons that Heroku provides, one of them is &lt;a href="https://www.heroku.com/postgres"&gt;Heroku Postgres&lt;/a&gt;. This is what I was using previously before I discovered about elephantSQL and I am pretty much satisfied with the services that Heroku Postgres provides.&lt;/p&gt;

&lt;p&gt;Moreover, it's not just great but also completely free, you don't even need to add credit card details to verify your account to use this (as for some other service like &lt;a href="https://www.heroku.com/redis"&gt;Heroku Redis&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Redis Lab
&lt;/h3&gt;

&lt;p&gt;Most of my side/client projects involve tasks where I require a fast, in-memory datastore either for caching, &lt;a href="https://akashrajpurohit.com/blog/api-rate-limit-in-nodejs-and-expressjs/"&gt;rate limiting&lt;/a&gt; or session management, for that, I mostly go with &lt;a href="https://redis.io/"&gt;Redis&lt;/a&gt;. For the cloud Redis database, I use &lt;a href="https://redislabs.com/"&gt;Redis Lab&lt;/a&gt;. You can signup for an account and get 1 database with 30 MB storage for free. This is more than enough for me for prototyping and testing things out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So these were most of the services that I have personally used and would recommend to others as well. My final thoughts are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I mostly use Heroku and Vercel for deploying most of my backend applications&lt;/li&gt;
&lt;li&gt;For frontend I mostly choose between Netlify and Vercel from the mentioned options, but all of these options provide very similar kind of services so at the end it boils down to our own experience while using them, my suggestion would be to try each one out and choose for yourself which is your preference&lt;/li&gt;
&lt;li&gt;For Databases, I have laid down all the services I use for different types of databases, there may be other service providers but these are the ones I tend to choose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know if something is missing in the list which you would've liked to see. 😊&lt;/p&gt;

</description>
      <category>resources</category>
      <category>services</category>
      <category>devops</category>
      <category>fullstack</category>
    </item>
  </channel>
</rss>
