GrabContacts automatically extracts email addresses, phone numbers, and social media profiles from websites and search queries (e.g. Lawyers in London).
| Folder | Description |
|---|---|
server/ |
Node.js/Express API — auth (Passport + JWT/sessions), MongoDB via Mongoose, Stripe billing, task queue producer/consumer (RabbitMQ) |
client/ |
React (Create React App) single-page app — dashboard, contact scraping tasks, account/billing pages |
website/ |
Marketing site (Tailwind CSS) |
old-website/ |
Legacy static marketing site, kept for reference |
Scraping requests are created via the client, queued in RabbitMQ (server/queue/task.js), and processed by one or more worker processes (server/queue/worker.js) that fetch contact data (Google Places API and/or SerpApi) and write results to MongoDB. server/gbservice.sh manages the API server and workers under pm2.
- Node.js 16+
- MongoDB instance (e.g. MongoDB Atlas)
- RabbitMQ instance (e.g. CloudAMQP)
- API keys/accounts: Google Maps/Places API, SerpApi, Stripe, Mailchimp, reCAPTCHA, and an SMTP-capable email account
cd server
npm install
cp .env.example .env # fill in real values
npm run dev # starts the API with nodemon
npm run worker-free # starts a worker process (also: worker-starter, worker-growth, worker-pro)See server/.env.example for the full list of required environment variables (database/queue URIs, session/JWT secrets, email, Stripe, Mailchimp, reCAPTCHA, and Google/SerpApi keys).
cd client
npm install
cp .env.example .env # fill in real values
npm start # runs on http://localhost:3000client/.env.example lists the required REACT_APP_* variables (Google Maps JS key, Stripe publishable key, reCAPTCHA site key).
cd website
npm install
npm run build-css