Skip to main content

GitlabHarvester — Global GitLab Code & Secret Search Tool (Python)

PyPI Python License Last Commit

GitlabHarvester is a fast, scalable tool for searching keywords across an entire GitLab instance using the API — without cloning repositories. Built for security audits, secret discovery, compliance checks, and large-scale code intelligence across thousands of projects.

Global term search across a full GitLab instance — especially valuable for GitLab CE environments.


⚡ Quick Start

Search a keyword:

gitlab-harvester -u https://gitlab.example.com -t $TOKEN --search password

Search from file:

gitlab-harvester -u https://gitlab.example.com -t $TOKEN --terms-file words.txt

Build project index only:

gitlab-harvester -u https://gitlab.example.com -t $TOKEN -m dump-index

Deduplicate results:

gitlab-harvester -m dedup --input-file session.jsonl --output-file clean.jsonl

Convert JSONL → JSON:

gitlab-harvester -m convert --input-file session.jsonl --output-file result.json

🚀 Overview

GitLab Community Edition does not provide full instance-wide code search like EE. GitlabHarvester fills this gap by:

  • building a lightweight instance project index
  • scanning repositories via API
  • streaming results in JSONL
  • supporting resumable sessions
  • keeping memory usage constant

Designed to operate efficiently on environments with 10k–100k repositories.


🔍 Key Advantages

Problem Solution
No global search Instance-wide scan
Cloning thousands repos API-only scanning
Large instances Streaming architecture
Repeated audits Cached project index

✨ Features

  • Instance-wide keyword search
  • No repository cloning
  • JSONL project index
  • Branch scanning strategies
  • Smart fork analysis
  • Resume interrupted scans
  • Streaming output
  • Low memory footprint
  • Automation-friendly
  • Built-in post-processing tools

📦 Installation

pipx install gitlab-harvester

Run:

gitlab-harvester --help

Alternative — pip

pip install gitlab-harvester

Development install

git clone https://github.com/Cur1iosity/GitlabHarvester.git
cd GitlabHarvester
pip install .

Editable mode:

pip install -e .

Install latest dev version

pipx install git+https://github.com/Cur1iosity/GitlabHarvester.git

Requirements

  • Python 3.10+
  • GitLab token with read_api permission

🌿 Branch Control

Two independent controls:

  • --index-branches — stored branches
  • --scan-branches — scanned branches

Example:

gitlab-harvester -u ... -t ... --scan-branches 10

Store all + scan all:

gitlab-harvester -u ... -t ... --index-branches all --scan-branches all

Shortcut:

--branches N

🍴 Fork Strategies

--forks skip|include|branch-diff|all-branches

Recommended → branch-diff

Mode Behavior
skip ignore forks
include treat as normal repos
branch-diff scan default + unique branches
all-branches full exhaustive scan

💾 Sessions & Resume

Create session:

gitlab-harvester -u ... -t ... --terms-file words.txt --session audit

Resume:

gitlab-harvester -u ... -t ... --session-file audit.jsonl --resume

📊 Output

Two file types:

File Purpose
Project index cached project metadata
Session file hits + checkpoints

Format → JSONL (streaming-friendly)


🧰 Post-Processing Modes

GitlabHarvester includes built-in post-processing utilities.

Deduplicate results

gitlab-harvester -m dedup \
  --input-file session.jsonl \
  --output-file clean.jsonl

Options:

  • --sqlite-path file.sqlite
  • --hash-algo blake2b|sha1|sha256
  • --no-normalize-hits

Convert JSONL → JSON

gitlab-harvester -m convert \
  --input-file session.jsonl \
  --output-file result.json

Pretty print:

jq . result.json > formatted.json

🏗 Architecture

GitLab API
   ↓
Indexer
   ↓
Branch planner
   ↓
Matcher
   ↓
JSONL stream

Constant memory usage regardless of instance size.


🎯 Typical Use Cases

  • secret discovery
  • credential leaks detection
  • internal audits
  • redteam/pentest reconnaissance
  • DevSecOps validation
  • large-scale code search

🔐 Security Notice

Use only on GitLab instances where you are authorized to perform scanning.


🤝 Contributing

Pull requests and ideas welcome.


📜 License

MIT

Metadata

Release files for gitlab-harvester 0.2.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gitlab-harvester 0.2.14
File Size Uploaded
gitlab_harvester-0.2.14.tar.gz 26.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gitlab-harvester 0.2.14
File Interpreter ABI Platform
gitlab_harvester-0.2.14-py3-none-any.whl Python 3 none any Details

Total release size: 57.9 kB

Release files / gitlab_harvester-0.2.14.tar.gz

Download URL gitlab_harvester-0.2.14.tar.gz
Size 26.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6c27f074979c762c34f50900ac290ad7088c5d0da38119bc96275bd97be3bb54
BLAKE2b-256 checksum
How to use checksums
62bc02f3b332c387d2ad41087d118f829527a7f1b7544715e7873eede251fbc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Release files / gitlab_harvester-0.2.14-py3-none-any.whl

Download URL gitlab_harvester-0.2.14-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
25ac0072d852f6be3c20d765b6694d7e15c6675bc7024cb72f59addd96838990
BLAKE2b-256 checksum
How to use checksums
18779d2ba00e31e62660dc920ef2d37235f0d182a3645dca11c1e8bf659a7cc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.14 This release

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page