Tally
How to connect Tally to FundReap automatically
A small program that watches a folder on your PC. Export from Tally into it, and your plan refreshes without you opening the site, signing in, or clicking upload. Here's exactly what it does, what it deliberately doesn't, and how to fix the two setup errors almost everyone hits on the first run.
1. Integrations → Connect Tally → Connect, copy the token.
2. Download the script, right-click it, Run with PowerShell.
3. Paste the token, pick a folder (default: Desktop\FundReap-Sync).
4. From then on: export from Tally into that folder, and it uploads itself.
What this actually is — and isn't
The connector automates the upload, not the export. It watches a folder and, the moment a spreadsheet lands in it, sends it to the exact same upload endpoint and parser a browser upload uses — same limits, same history, same result.
Want FundReap to read straight from Tally instead, with no export step at all? There's now a live version that does exactly that — see Auto-sync Tally with no export. This folder-watcher script stays here as the simpler, no-configuration fallback either way.
Step 1 — Get your token
- Sign in at fundreap.com/app
- Integrations → Connect Tally → Connect
- Copy the token shown — it's shown once. If you lose it, click Reconnect to issue a new one; the old one stops working.
Verify it before you run it
This is a plain, unsigned PowerShell script — Windows will likely show a security warning the first time you run it. That's normal for any script downloaded from a browser and not code-signed, not a sign anything's wrong (see "Common problems" below for exactly what that warning means and how to get past it). Standard practice for any unsigned script from any source, not just this one, is to actually read it first — so here's everything that takes, in one place.
- Reads files only from the one folder you choose during setup — nothing else on your computer.
- Sends data only to
fundreap.com/api/connector/upload— the exact same endpoint a browser upload already uses. No analytics, no telemetry, nowhere else. - Never asks for administrator rights, and never needs them.
- Can't write to Tally, delete anything, or launch any other program.
Read the entire script before downloading it (76 lines)
# FundReap desktop connector.
#
# Watches a folder for a fresh Tally export and uploads it automatically, so
# a plan refresh is "export, drop the file" instead of "export, open the
# site, sign in, click upload". Reuses the exact same upload endpoint and
# parser as the website; this only automates the click, not the parsing.
#
# Run it: right-click this file -> "Run with PowerShell". First run asks for
# your connector token (Integrations -> Connect Tally on fundreap.com) and a
# folder to watch, then remembers both in a config file next to this script.
$ErrorActionPreference = 'Stop'
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$configPath = Join-Path $scriptDir 'fundreap-connector.config.json'
$apiUrl = 'https://fundreap.com/api/connector/upload'
function Write-Status($msg, $color = 'Gray') {
Write-Host "[$(Get-Date -Format 'HH:mm:ss')] $msg" -ForegroundColor $color
}
if (Test-Path $configPath) {
$config = Get-Content $configPath -Raw | ConvertFrom-Json
} else {
Write-Host ''
Write-Host 'FundReap Connector - first-time setup' -ForegroundColor Cyan
Write-Host 'Get your token from fundreap.com -> Integrations -> Connect Tally.'
Write-Host ''
$token = Read-Host 'Paste your connector token'
if ([string]::IsNullOrWhiteSpace($token)) { Write-Host 'No token entered - exiting.' -ForegroundColor Red; exit 1 }
$defaultFolder = Join-Path $env:USERPROFILE 'Desktop\FundReap-Sync'
$watchFolder = Read-Host "Folder to watch for exports [$defaultFolder]"
if ([string]::IsNullOrWhiteSpace($watchFolder)) { $watchFolder = $defaultFolder }
$config = [pscustomobject]@{ token = $token.Trim(); watchFolder = $watchFolder }
$config | ConvertTo-Json | Set-Content $configPath
Write-Host "Saved. Editing $configPath directly changes these later." -ForegroundColor DarkGray
}
$watchFolder = $config.watchFolder
$processedFolder = Join-Path $watchFolder 'processed'
New-Item -ItemType Directory -Force -Path $watchFolder, $processedFolder | Out-Null
Write-Host ''
Write-Status "Watching $watchFolder - export from Tally (Alt+E -> Excel) into this folder." 'Green'
Write-Status 'Leave this window open. Ctrl+C to stop.' 'DarkGray'
Write-Host ''
while ($true) {
$files = Get-ChildItem -Path $watchFolder -File -Include *.xlsx, *.xls, *.csv -ErrorAction SilentlyContinue
foreach ($file in $files) {
Write-Status "Uploading $($file.Name) ..."
try {
$bytes = [System.IO.File]::ReadAllBytes($file.FullName)
$base64 = [System.Convert]::ToBase64String($bytes)
$body = @{ fileBase64 = $base64; filename = $file.Name } | ConvertTo-Json
$r = Invoke-RestMethod -Uri $apiUrl -Method Post -Body $body `
-ContentType 'application/json' `
-Headers @{ Authorization = "Bearer $($config.token)" }
if ($r.error) {
Write-Status " Rejected: $($r.error)" 'Yellow'
} else {
$dest = Join-Path $processedFolder "$(Get-Date -Format 'yyyyMMdd-HHmmss')-$($file.Name)"
Move-Item -Path $file.FullName -Destination $dest -Force
Write-Status ' Done - moved to processed folder' 'Green'
}
} catch {
Write-Status " Failed: $($_.Exception.Message)" 'Red'
Write-Status ' Will retry next pass. Check your token if this keeps happening.' 'DarkGray'
}
}
Start-Sleep -Seconds 20
}
Verify the file you downloaded matches this source exactly. Its SHA-256 checksum is published at fundreap-connector.ps1.sha256 — computed live from the file actually being served, not a value someone could forget to update. After downloading, check it yourself in PowerShell:
Get-FileHash .\fundreap-connector.ps1 -Algorithm SHA256
Compare the Hash value it prints to what's at the link above — a
match means the file on your computer is byte-for-byte what's shown here.
Step 2 — Download and run the script
- Click Download the connector script on that same screen (or grab it directly: fundreap-connector.ps1)
- Right-click the downloaded file → Run with PowerShell
- First run asks for the token, then a folder to watch. Both get saved next to the
script, in
fundreap-connector.config.json— edit that file directly to change either one later.
Step 3 — Export into the watched folder
Leave the PowerShell window open — that's what's doing the watching, every 20 seconds.
Then, whenever you want a fresh plan: open Tally, run
the same Alt+E export as always, but save it
straight into the watched folder instead of wherever you'd normally put it. Within a minute
it uploads, moves itself into a processed subfolder, and your plan on
fundreap.com is updated — no need to open the site at all.
Common problems
"Running scripts is disabled on this system"
Windows blocks unsigned .ps1 files from running by default on most machines.
Right-click the script → Properties → tick Unblock at the bottom → OK, then try
again. If it still refuses, open PowerShell as your normal user (not Administrator) in the
folder with the script and run:
powershell -ExecutionPolicy Bypass -File .\fundreap-connector.ps1
This only bypasses the policy for that one run — it doesn't change any system setting.
"Windows protected your PC" (SmartScreen)
Normal for a script downloaded from a browser and not code-signed. Click More info → Run anyway. The script is plain, readable PowerShell — open it in Notepad first if you want to see exactly what it does before trusting it; there's nothing compiled or hidden.
Integrations still shows "Waiting for the first export"
That's correct until the script has actually sent a file — clicking Connect only issues the token, it doesn't mean anything has synced yet. Drop a file in the watched folder and give it a minute; the badge turns green ("Connected") the moment a real upload authenticates with the token, not before.
"Rejected: ..." in the script's log window
The upload reached the server but the file itself didn't parse — same reasons a browser upload would fail (wrong report exported, no bill-wise details, etc.). Sign in and check the Upload screen's own error message; the connector doesn't add a separate failure mode on top of the ordinary parser.
Turning it off
Close the PowerShell window to stop watching — nothing runs when it isn't open, there's no background service. To fully disconnect, go to Integrations → Connect Tally → Reconnect, which issues a fresh token and invalidates the old one, so the old script (if run again) can no longer upload anything.
Sign in, then Integrations → Connect Tally to get your token and the script.
Go to SettingsNext: How to export the outstanding receivables report from Tally · How to reduce DSO