VBA मैक्रो के साथ Excel कॉन्टैक्ट्स को Brevo में कैसे पुश करें (और Office Scripts विकल्प)

एक काम करने वाला VBA मैक्रो जो Excel शीट से कॉन्टैक्ट्स को एक क्लिक में Brevo के API पर पोस्ट करता है, साथ ही कब इसके बजाय Office Scripts + Power Automate का उपयोग करें, और Google Apps Script सेटअप के मुकाबले ट्रेड-ऑफ़।

Featured image for article: VBA मैक्रो के साथ Excel कॉन्टैक्ट्स को Brevo में कैसे पुश करें (और Office Scripts विकल्प)

आपके पास Excel में कॉन्टैक्ट्स हैं और आप उन्हें Brevo में चाहते हैं। तेज़-और-गंदा जवाब है फ़ाइल को .csv के रूप में सेव करें और इसे इम्पोर्ट करें, जो एक बार के लिए ठीक है। कुछ भी जो आप बार-बार कर रहे हैं, साप्ताहिक सेल्स हैंडऑफ़, एक वर्कबुक जिसे आपकी टीम रोज़ अपडेट करती है, एक पार्टनर लिस्ट जो रिफ़्रेश होती रहती है, के लिए आप सीधे Excel के अंदर एक बटन चाहते हैं जो सिंक करे।

यह गाइड उन दो रास्तों को कवर करती है जो वास्तव में इसके लिए सही हैं:

  1. वर्कबुक में एम्बेडेड एक VBA मैक्रो, कोई लाइसेंसिंग नहीं, कोई क्लाउड नहीं, ऑफ़लाइन काम करता है, उस पल चलता है जब उपयोगकर्ता एक बटन क्लिक करता है। “Excel-to-Brevo” मामलों के लगभग 80% के लिए सही उत्तर।
  2. Office Scripts + Power Automate, VBA के बजाय TypeScript, क्लाउड में चलता है, शेड्यूल्ड ट्रिगर्स को सपोर्ट करता है। सही उत्तर यदि वर्कबुक OneDrive/SharePoint पर रहती है और आप अनअटेंडेड सिंक चाहते हैं, लेकिन Power Automate लाइसेंसिंग के बारे में सावधान रहें।

यदि आप Google Sheets समतुल्य की तलाश में हैं, तो Apps Script पर साथी आर्टिकल देखें। और यदि आप बस अपने लैपटॉप पर एक स्क्रिप्ट से वन-शॉट CSV इम्पोर्ट चाहते हैं, तो CSV इम्पोर्ट गाइड में Python, Node.js, और cURL वर्शन्स हैं।

मैक्रो क्या करता है

जब उपयोगकर्ता शीट पर “Sync to Brevo” बटन क्लिक करता है:

  1. एक्टिव वर्कशीट से हर रो पढ़ें (हेडर रो पहले, एक कॉन्टैक्ट प्रति रो)।
  2. Brevo के jsonBody पैरामीटर के लिए शेप्ड एक JSON ऐरे बनाएँ।
  3. इसे वर्कबुक के स्टोर्ड API key के साथ https://api.brevo.com/v3/contacts/import पर पोस्ट करें।
  4. परिणाम के साथ एक मैसेज बॉक्स दिखाएँ।

बस इतना ही। लगभग 120 लाइनें VBA। नीचे पूरा, काम करने वाला मॉड्यूल है।

मैक्रो जो शीट लेआउट अपेक्षा करता है

emailfirstNamelastNamecompanycity
[email protected]JaneDoeAcmeBerlin
[email protected]JohnSmithGlobexParis

email अनिवार्य है। हर दूसरा कॉलम Brevo कॉन्टैक्ट एट्रिब्यूट बन जाता है, कॉलम हेडर (अपरकेस्ड) द्वारा एट्रिब्यूट नाम पर मैप किया जाता है। तो firstName -> FIRSTNAME, company -> COMPANY। कस्टम एट्रिब्यूट्स (स्टैंडर्ड सेट से परे कुछ भी) को पहले आपके Brevo अकाउंट में मौजूद होना चाहिए, उन्हें Contacts -> Settings -> Contact attributes के तहत डिफ़ाइन करें।

स्टेप 1: VBA एडिटर खोलें

Excel में: Alt + F11 दबाएँ। VBA एडिटर खुलता है। बाईं ओर Project पैन में, अपनी वर्कबुक पर राइट-क्लिक करें और Insert -> Module चुनें। एक खाली Module1 दिखाई देता है।

स्टेप 2: पूरा मैक्रो पेस्ट करें

Module1 के कंटेंट को इससे रिप्लेस करें:

' ===========================================================================
' Brevo contact sync for Excel
' Reads the active sheet's rows and POSTs them to Brevo's import API.
' ===========================================================================
Option Explicit
Private Const BREVO_API_BASE As String = "https://api.brevo.com/v3"
Private Const BREVO_LIST_ID As Long = 42 ' <- your Brevo list ID
Private Const BATCH_SIZE As Long = 1000
' --- Public entry points (the ones you assign to ribbon buttons) -----------
Public Sub SyncSheetToBrevo()
Dim apiKey As String
apiKey = GetApiKey()
If apiKey = "" Then
MsgBox "No API key configured. Run ConfigureApiKey first.", _
vbExclamation, "Brevo Sync"
Exit Sub
End If
Dim ws As Worksheet
Set ws = ActiveSheet
Dim emailCol As Long
emailCol = FindEmailColumn(ws)
If emailCol = 0 Then
MsgBox "Sheet must have an 'email' column in row 1.", _
vbExclamation, "Brevo Sync"
Exit Sub
End If
Dim lastRow As Long, lastCol As Long
lastRow = ws.Cells(ws.Rows.Count, emailCol).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
If lastRow < 2 Then
MsgBox "No contact rows found.", vbInformation, "Brevo Sync"
Exit Sub
End If
Dim contacts As Collection
Set contacts = New Collection
Dim r As Long, c As Long
For r = 2 To lastRow
Dim email As String
email = LCase(Trim(CStr(ws.Cells(r, emailCol).Value)))
If email <> "" And InStr(email, "@") > 0 Then
Dim json As String
json = "{""email"":""" & EscapeJson(email) & """,""attributes"":{"
Dim attrFirst As Boolean
attrFirst = True
For c = 1 To lastCol
If c <> emailCol Then
Dim val As String
val = CStr(ws.Cells(r, c).Value)
If val <> "" Then
If Not attrFirst Then json = json & ","
Dim attrName As String
attrName = UCase(Trim(CStr(ws.Cells(1, c).Value)))
json = json & """" & attrName & """:""" & EscapeJson(val) & """"
attrFirst = False
End If
End If
Next c
json = json & "}}"
contacts.Add json
End If
Next r
If contacts.Count = 0 Then
MsgBox "No valid contact rows found.", vbInformation, "Brevo Sync"
Exit Sub
End If
Dim totalSent As Long
Dim batchNum As Long
Dim okCount As Long, failCount As Long
Dim batchStart As Long
For batchStart = 1 To contacts.Count Step BATCH_SIZE
batchNum = batchNum + 1
Dim batchEnd As Long
batchEnd = batchStart + BATCH_SIZE - 1
If batchEnd > contacts.Count Then batchEnd = contacts.Count
Dim payload As String
payload = "{""jsonBody"":["
Dim i As Long
For i = batchStart To batchEnd
If i > batchStart Then payload = payload & ","
payload = payload & contacts(i)
Next i
payload = payload & "],""listIds"":[" & BREVO_LIST_ID & _
"],""updateExistingContacts"":true,""emptyContactsAttributes"":false}"
Dim ok As Boolean
ok = PostToBrevo(apiKey, payload)
If ok Then
okCount = okCount + 1
totalSent = totalSent + (batchEnd - batchStart + 1)
Else
failCount = failCount + 1
End If
Next batchStart
MsgBox "Sent " & totalSent & " contact(s) in " & batchNum & " batch(es)." _
& vbCrLf & "Successful batches: " & okCount _
& vbCrLf & "Failed batches: " & failCount, _
vbInformation, "Brevo Sync"
End Sub
Public Sub ConfigureApiKey()
Dim key As String
key = InputBox("Paste your Brevo API key (xkeysib-...):", "Brevo API Key")
If key = "" Then Exit Sub
key = Trim(key)
If Left(key, 8) <> "xkeysib-" Then
MsgBox "That doesn't look like a Brevo API key (should start with xkeysib-).", _
vbExclamation, "Brevo API Key"
Exit Sub
End If
On Error Resume Next
ThisWorkbook.CustomDocumentProperties("BrevoApiKey").Delete
On Error GoTo 0
ThisWorkbook.CustomDocumentProperties.Add _
Name:="BrevoApiKey", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=key
ThisWorkbook.Save
MsgBox "API key saved inside the workbook.", vbInformation, "Brevo API Key"
End Sub
' --- Private helpers --------------------------------------------------------
Private Function GetApiKey() As String
On Error Resume Next
GetApiKey = ThisWorkbook.CustomDocumentProperties("BrevoApiKey").Value
On Error GoTo 0
End Function
Private Function FindEmailColumn(ws As Worksheet) As Long
Dim lastCol As Long, c As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
For c = 1 To lastCol
If LCase(Trim(CStr(ws.Cells(1, c).Value))) = "email" Then
FindEmailColumn = c
Exit Function
End If
Next c
FindEmailColumn = 0
End Function
Private Function PostToBrevo(apiKey As String, payload As String) As Boolean
Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", BREVO_API_BASE & "/contacts/import", False
http.SetRequestHeader "api-key", apiKey
http.SetRequestHeader "Content-Type", "application/json"
http.SetRequestHeader "Accept", "application/json"
http.Send payload
PostToBrevo = (http.Status = 202)
If Not PostToBrevo Then
Debug.Print "Brevo error " & http.Status & ": " & http.responseText
End If
End Function
Private Function EscapeJson(s As String) As String
Dim r As String
r = Replace(s, "\", "\\")
r = Replace(r, """", "\""")
r = Replace(r, vbCrLf, "\n")
r = Replace(r, vbLf, "\n")
r = Replace(r, vbCr, "\n")
r = Replace(r, vbTab, "\t")
EscapeJson = r
End Function

स्टेप 3: वर्कबुक को .xlsm के रूप में सेव करें

VBA मैक्रोज़ केवल मैक्रो-इनेबल्ड वर्कबुक्स में बने रहते हैं। Save As -> Excel Macro-Enabled Workbook (.xlsm) चुनें। साधारण .xlsx फ़ॉर्मेट चुपचाप मैक्रोज़ को हटा देता है, बहुत से लोग पहली बार इस तरह कोड खो देते हैं।

स्टेप 4: अपनी API key कॉन्फ़िगर करें

ConfigureApiKey को एक बार चलाएँ। या तो:

  • VBA एडिटर में, ConfigureApiKey सब के अंदर कहीं भी क्लिक करें और F5 दबाएँ, या
  • Excel में, Developer -> Macros, ConfigureApiKey चुनें, Run

अपनी xkeysib-... key पेस्ट करें। मैक्रो इसे वर्कबुक के अंदर एक कस्टम डॉक्यूमेंट प्रॉपर्टी के रूप में स्टोर करता है, यह सोर्स कोड में नहीं है, रजिस्ट्री में नहीं है, और फ़ाइल के साथ यात्रा करता है (इसलिए सावधान रहें: यदि आप .xlsm को किसी को ईमेल करते हैं, तो API key इसके साथ जाती है)।

यदि आप key को वर्कबुक के बाहर रखना पसंद करेंगे, तो स्टोरेज को Windows रजिस्ट्री में स्वैप करें:

' Replace the body of ConfigureApiKey with:
SaveSetting "Brevo", "Sync", "ApiKey", key
' And GetApiKey with:
GetApiKey = GetSetting("Brevo", "Sync", "ApiKey", "")

SaveSetting/GetSetting HKCU\Software\VB and VBA Program Settings\Brevo\Sync के तहत लिखता है, प्रति-उपयोगकर्ता, प्रति-वर्कबुक नहीं। इसका उपयोग करें यदि कई वर्कबुक्स को एक key साझा करनी चाहिए, या यदि आप नहीं चाहते कि key फ़ाइल में हो।

स्टेप 5: शीट पर एक बटन जोड़ें

यह वही है जो इसे ग़ैर-तकनीकी उपयोगकर्ताओं के लिए एक-क्लिक अनुभव में बदलता है।

Insert -> Shapes -> Rectangle, एक को शीट पर ड्रॉप करें, इसे “Sync to Brevo” लेबल दें। शेप पर राइट-क्लिक करें -> Assign Macro -> SyncSheetToBrevo चुनें। हो गया।

या, अधिक पॉलिश्ड UI के लिए, Office Custom UI Editor के माध्यम से एक कस्टम रिबन टैब जोड़ें, लेकिन अधिकांश आंतरिक टूल्स के लिए, शेप-एज़-बटन काफी है।

स्टेप 6: इसे चलाएँ

बटन क्लिक करें। मैक्रो रोज़ पढ़ता है, उन्हें बैच करता है, हर बैच को Brevo में पोस्ट करता है, और एक सारांश मैसेज बॉक्स दिखाता है। Brevo का इम्पोर्ट asynchronous है, इसलिए सक्सेस मैसेज का अर्थ है “Brevo ने बैच स्वीकार कर लिया”, वास्तविक कॉन्टैक्ट निर्माण अगले कुछ सेकंड में सर्वर साइड पर होता है। जब यह समाप्त हो जाएगा तो आपको Brevo से एक ईमेल सारांश मिलेगा (जब तक आप disableNotification: true सेट नहीं करते)।

सामान्य गलतियाँ

बटन कुछ नहीं करता और कोई एरर नहीं है. मैक्रोज़ डिसेबल्ड हैं। शीट के शीर्ष पर पीली सिक्योरिटी बार देखें, Enable Content क्लिक करें। यदि आपका org मैक्रोज़ ब्लॉक करता है, तो नीचे ट्रस्ट-सेंटर / कोड-साइनिंग पाथ देखें।

Compile error: User-defined type not defined. आप Mac Excel पर हैं, जिसमें MSXML2.XMLHTTP नहीं है। Mac VBA सीधे HTTPS रिक्वेस्ट नहीं कर सकता; इसके बजाय नीचे Office Scripts पाथ का उपयोग करें।

बिना स्पष्ट कारण के Brevo से 400 Bad Request. लगभग हमेशा एक: (a) आपकी शीट में एक कस्टम एट्रिब्यूट अभी तक Brevo में मौजूद नहीं है, पहले बनाएँ; (b) JSON एस्केपिंग बग, सेल वैल्यूज़ में कोट्स या बैकस्लैश जो एस्केप नहीं हुए। कोड में EscapeJson फ़ंक्शन स्टैंडर्ड मामलों को हैंडल करता है; यदि आपके डेटा में अजीब कैरेक्टर्स हैं, तो payload को Immediate विंडो (Debug.Print payload) पर लॉग करें और जाँचें।

401 Unauthorized. ग़लत हेडर। यह api-key है (छोटे अक्षर, हाइफ़न), Authorization नहीं। मैक्रो सही वाला उपयोग करता है, लेकिन यदि आपने कहीं और से स्निपेट कॉपी किया है, तो डबल-चेक करें।

Excel बड़े इम्पोर्ट्स पर फ़्रीज़ हो जाता है. मैक्रो UI थ्रेड पर सिंक्रोनस्ली चलता है। 50,000+ रोज़ के लिए, आप Excel को 10-30 सेकंड के लिए हैंग देखेंगे जबकि यह JSON बनाता है और Brevo पर इंतज़ार करता है। या तो स्वीकार करें, या MSXML2.XMLHTTP को इसके async वैरिएंट पर स्विच करें, लेकिन उस स्केल पर आप Power Automate में बेहतर हैं (अगला सेक्शन)।

जब VBA पर्याप्त नहीं है: Office Scripts + Power Automate

VBA शेड्यूल्ड क्लाउड सिंक नहीं कर सकता। यदि आपको चाहिए:

  • वर्कबुक हर घंटे Brevo के साथ सिंक हो बिना कोई इसे खोले
  • वर्कबुक OneDrive/SharePoint पर, वेब से एडिट किया गया
  • एक IT डिपार्टमेंट जो डेस्कटॉप मैक्रोज़ को बैन करता है

…तो आप Office Scripts (Apps Script का Microsoft क्लाउड समतुल्य) प्लस Power Automate (उनकी शेड्यूलिंग और HTTP लेयर) चाहते हैं।

विभाजन: Office Scripts शीट पढ़ता है और कॉन्टैक्ट डेटा लौटाता है। Power Automate उस डेटा को लेता है और एक ट्रिगर पर Brevo पर पोस्ट करता है।

Office Script (वेब के लिए Excel -> Automate -> New Script):

function main(workbook: ExcelScript.Workbook): {email: string, attributes: Record<string, string>}[] {
const sheet = workbook.getActiveWorksheet();
const range = sheet.getUsedRange();
if (!range) return [];
const values = range.getValues() as string[][];
if (values.length < 2) return [];
const headers = values[0].map(h => String(h).trim());
const emailIdx = headers.findIndex(h => h.toLowerCase() === "email");
if (emailIdx === -1) throw new Error("Sheet must have an 'email' column");
const contacts: {email: string, attributes: Record<string, string>}[] = [];
for (let r = 1; r < values.length; r++) {
const row = values[r];
const email = String(row[emailIdx] ?? "").trim().toLowerCase();
if (!email || !email.includes("@")) continue;
const attributes: Record<string, string> = {};
for (let c = 0; c < headers.length; c++) {
if (c === emailIdx) continue;
const v = row[c];
if (v === null || v === "") continue;
attributes[headers[c].toUpperCase()] = String(v);
}
contacts.push({ email, attributes });
}
return contacts;
}

Power Automate फ़्लो:

  1. Trigger: Recurrence (हर 1 घंटा), या मैनुअल बटन, या “When a row is modified” यदि आप परिवर्तन-संचालित सिंक चाहते हैं।
  2. Action: Excel Online -> Run script, इसे अपनी वर्कबुक और ऊपर की स्क्रिप्ट पर पॉइंट करें। इसकी रिटर्न वैल्यू को contacts के रूप में सेव करें।
  3. Action: HTTP (यह प्रीमियम कनेक्टर है, नीचे लाइसेंसिंग नोट देखें)।
    • Method: POST
    • URI: https://api.brevo.com/v3/contacts/import
    • Headers: api-key: xkeysib-..., Content-Type: application/json
    • Body:
      {
      "jsonBody": @{outputs('Run_script')?['body/result']},
      "listIds": [42],
      "updateExistingContacts": true
      }
  4. Action: Condition -> यदि स्टेटस कोड 202 नहीं है, तो Teams/ईमेल अलर्ट भेजें।

लाइसेंसिंग वास्तविकता जाँच: HTTP एक्शन एक Power Automate प्रीमियम कनेक्टर है। Microsoft 365 Business Basic/Standard प्लांस पर आपको स्टैंडर्ड कनेक्टर्स मिलते हैं लेकिन प्रीमियम नहीं। सबसे सस्ता वर्कअराउंड है Power Automate Premium ऐड-ऑन (~$15/उपयोगकर्ता/महीना लेखन के समय), या HTTP को एक छोटे Azure Function में ले जाएँ जिसे स्टैंडर्ड फ़्लो कॉल कर सकता है। यदि आप पहले से ही Premium के साथ E3/E5 पर हैं, तो आप तैयार हैं।

यह मुख्य कारण है कि Apps Script की कहानी क्लीनर है: Apps Script का UrlFetchApp मुफ़्त और अप्रतिबंधित है, जबकि Microsoft समतुल्य नेटवर्क कॉल को पेड कनेक्टर टियर के पीछे रखता है।

VBA बनाम Office Scripts बनाम Apps Script: कब क्या चुनें

ज़रूरतसर्वोत्तम विकल्प
एक वर्कबुक में एक-क्लिक बटन जिसे आपकी टीम पहले से ही रोज़ खोलती हैVBA मैक्रो (यह गाइड, ऊपरी आधा)
OneDrive/SharePoint पर वर्कबुक, हर घंटे ऑटो-सिंकOffice Scripts + Power Automate (HTTP के लिए Premium चाहिए)
केवल Mac Excel, VBA उपयोग नहीं कर सकतेOffice Scripts + Power Automate
डेटा Google Sheets में रहता है, Excel में नहींApps Script (मुफ़्त, बिल्ट-इन शेड्यूल्ड ट्रिगर्स)
वन-ऑफ़ इम्पोर्ट, फिर कभी ज़रूरत नहींSave As -> CSV और CSV इम्पोर्ट स्क्रिप्ट का उपयोग करें
10 MB से बड़ी फ़ाइल से बल्क इम्पोर्टfileUrl के साथ CSV, CSV गाइड देखें

यह Zapier / नो-कोड प्लेटफ़ॉर्मस से बेहतर क्यों है

बार-बार होने वाली Excel-to-Brevo जॉब के लिए, थर्ड-पार्टी ऑटोमेशन टूल्स (Zapier, Make, n8n) प्रति-टास्क चार्ज करते हैं और आपके डेटा और Brevo के बीच एक थर्ड पार्टी डालते हैं। VBA दृष्टिकोण की कोई चालू लागत नहीं है, कोई थर्ड-पार्टी डेटा फ़्लो नहीं है, और यह फ़ाइल के अंदर रहता है, जब वर्कबुक चलती है, तो इंटीग्रेशन इसके साथ चलता है। Office Scripts + Power Automate समान है लेकिन Microsoft थर्ड पार्टी के रूप में (आपके स्टैक में पहले से ही है यदि आप M365 पर हैं)।

Brevo POST /v3/contacts/import एंडपॉइंट का पूरा बिंदु है कि आपको ग्लू प्लेटफ़ॉर्म की आवश्यकता नहीं है, आपके टूल्स पहले से ही जानते हैं कि HTTP रिक्वेस्ट कैसे करें।

आगे पढ़ने के लिए

Frequently Asked Questions

क्या VBA मैक्रो वास्तव में Excel के अंदर से Brevo के API को कॉल कर सकता है?
हाँ। VBA MSXML2.XMLHTTP के माध्यम से HTTP रिक्वेस्ट कर सकता है, जो हर मॉडर्न Windows इंस्टॉल के साथ आता है। मैक्रो api.brevo.com/v3/contacts/import पर JSON पोस्ट करता है, वही एंडपॉइंट जिसे Python या Node स्क्रिप्ट हिट करेगी। Mac Excel भी इसे Office Scripts + Power Automate के माध्यम से कर सकता है, लेकिन डेस्कटॉप Mac VBA नहीं कर सकता (कोई MSXML नहीं)।
क्या मैं इसे Apps Script टाइम ट्रिगर्स की तरह शेड्यूल पर चला सकता हूँ?
अकेले VBA से नहीं, Application.OnTime के फ़ायर होने के लिए Excel खुला होना चाहिए। अनअटेंडेड शेड्यूल्ड सिंक के लिए आपके पास दो विकल्प हैं: (1) Windows Task Scheduler जो वर्कबुक खोलता है और मैक्रो चलाता है, या (2) Power Automate शेड्यूल्ड फ़्लो द्वारा ट्रिगर किए गए Office Scripts (इस गाइड में बाद में कवर किया गया)।
क्या VBA सुरक्षित है? मेरी कंपनी मैक्रोज़ को ब्लॉक करती है।
VBA मैक्रोज़ फ़ाइल-सिस्टम और रजिस्ट्री एक्सेस के साथ चलते हैं, इसलिए उन्हें डिफ़ॉल्ट रूप से ब्लॉक करना एक समझदार पॉलिसी है। इसके आसपास दो रास्ते: (1) मैक्रो को कोड-साइनिंग सर्ट के साथ साइन करें और वर्कबुक को Trusted Location में रखें, या (2) पूरी तरह से VBA को छोड़ दें और Office Scripts का उपयोग करें (TypeScript, सैंडबॉक्स्ड, कोई फ़ाइल-सिस्टम एक्सेस नहीं)। Office Scripts मॉडर्न Microsoft-समर्थित रास्ता है।
यह Google Apps Script दृष्टिकोण से कैसे तुलना करता है?
Apps Script सेट-एंड-फ़ॉरगेट के करीब है, Google के क्लाउड में चलता है, बिल्ट-इन शेड्यूल्ड ट्रिगर्स, कोई Excel/Power Automate लाइसेंस नहीं। VBA ऑफ़लाइन काम और एक वर्कबुक से एक-क्लिक मैनुअल सिंक के लिए जीतता है जिसे आपकी टीम पहले से ही खुला रखती है। Office Scripts + Power Automate Microsoft साइड पर क्लाउड/शेड्यूल्ड समतुल्य है, लेकिन Power Automate को अक्सर आउटबाउंड HTTP के लिए पेड प्रीमियम कनेक्टर की आवश्यकता होती है।
Brevo के साथ मुफ्त में शुरू करें