FundReap
Product Pricing Guides Sign in Free health check

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.

Short version

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.

This version does not talk to Tally directly — you still run the export by hand. The connector only removes the steps after that file exists on disk. Your plan is only as fresh as the last export someone ran.

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

  1. Sign in at fundreap.com/app
  2. Integrations → Connect TallyConnect
  3. 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.

What it can and can't do
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

  1. Click Download the connector script on that same screen (or grab it directly: fundreap-connector.ps1)
  2. Right-click the downloaded file → Run with PowerShell
  3. 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 infoRun 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.

Haven't connected yet?

Sign in, then Integrations → Connect Tally to get your token and the script.

Go to Settings

Next: How to export the outstanding receivables report from Tally · How to reduce DSO