npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

menjometre-cli

v2.1.0

Published

CLI tool for querying Menjometre public transparency data

Readme

menjometre-cli

Eina de línia de comandes per consultar les dades públiques de Menjometre — l'observatori independent de subvencions i contractes públics a Catalunya.

Totes les dades provenen de fonts oficials i públiques (RAISC, BORME, Dades Obertes de Catalunya).

IMPORTANT PER A AGENTS: Usa sempre --json per obtenir sortida estructurada parsejable. La sortida per defecte és una taula formatejada per humans.


Instal·lació ràpida

npm install -g menjometre-cli   # instal·lació global
npx menjometre-cli stats        # o executar sense instal·lar

Requereix Node.js >= 18. No cal autenticació ni clau API.


Arbre de decisió per a agents

Vull informació sobre una entitat concreta?
├── Tinc el CIF (ex: G08000011) → menjometre entity G08000011 --json
├── Tinc el slug (ex: ENTITAT-EXEMPLE) → menjometre entity ENTITAT-EXEMPLE --json
├── Tinc només el nom → menjometre search "nom entitat" --json
│                        └── Agafa el camp `identifier` del primer resultat
│                            └── menjometre entity <identifier> --json
└── Vull les subvencions/contractes individuals?
    ├── menjometre grants <identifier> --json
    └── menjometre contracts <identifier> --json

Vull dades globals?
├── Xifres del dataset → menjometre stats --json
├── Ranking d'entitats → menjometre top --limit 50 --json
├── Xarxa de contactes → menjometre xarxa --limit 20 --json
│                         └── Resultat en data.contacts[] (max --limit 100)
│                             ├── Paginar → menjometre xarxa --limit 50 --offset 50 --json
│                             └── Filtrar per conflicte → menjometre xarxa --vincle-filter conflicte_directe --json
├── Perfil complet d'una persona → menjometre persona "Nom Cognom" --json
├── Convenis d'una entitat → menjometre convenis <identifier> --json
├── Transferències pressupostàries → menjometre pressupostos <identifier> --json
├── Estats financers anuals → menjometre financials <identifier> --json
├── Exportació massiva → menjometre export --format json
└── Equivalències d'un import → menjometre equivalencies 5000000 --json

Vull dades d'un càrrec públic?
├── Perfil i puntuació → menjometre politician "nom cognom" --json
├── Vincles amb entitats → menjometre vincles "nom cognom" --json
├── Declaracions patrimonials → menjometre declarations "nom cognom" --json
└── Dades per partits → menjometre politics --view parties --json
                        └── menjometre politics --view politicians --party "PSC" --json

Vull enviar feedback?
└── menjometre feedback bug "descripció del problema amb almenys 20 caràcters"

Conceptes clau

Identificadors d'entitat

Cada entitat té fins a 3 identificadors. L'API accepta qualsevol dels tres:

| Tipus | Exemple | Descripció | |---|---|---| | Slug | ENTITAT-EXEMPLE | Nom normalitzat (majúscules, sense accents, guions). És el més comú. | | CIF | G08000011 | Codi d'identificació fiscal. Pot ser null (~85% entitats no en tenen). | | Slug en minúscules | entitat-exemple | També funciona, es resol automàticament. |

L'API resol l'identificador en 4 passos: CIF → slug exacte → slug en majúscules → taula de redireccions de slugs antics.

Què és el Menjometre Score

Puntuació de 0 a 100 que mesura patrons estadístics en la distribució de fons públics. Llindar mínim: 25.000 € en fons públics totals. Per sota, menjometre_score = 0.

Veure metodologia completa: menjometre.cat/metodologia


Referència de comandes

search — Cercar entitats i persones

Cerca per nom o CIF. Retorna fins a 8 resultats ordenats per import total descendent.

menjometre search "nom entitat" --json

Resposta JSON (array):

[
  {
    "type": "entity",
    "identifier": "ENTITAT-EXEMPLE",
    "name": "Entitat Exemple",
    "cif": "G08000011",
    "total_amount": 1500000,
    "municipality": "Barcelona",
    "entity_count": null
  },
  {
    "type": "person",
    "identifier": "nom-cognom",
    "name": "Nom Cognom",
    "cif": null,
    "total_amount": 500000,
    "municipality": null,
    "entity_count": 5
  }
]

| Camp | Descripció | |---|---| | type | "entity" o "person" — indica el tipus de resultat | | identifier | Slug (entitats) o nom (persones) — per passar a entity | | entity_count | Nombre d'entitats vinculades (només per a persones, null per a entitats) |


entity — Perfil complet d'una entitat

Accepta CIF, slug o slug en minúscules.

menjometre entity ENTITAT-EXEMPLE --json
menjometre entity G08000011 --json

Resposta JSON (objecte):

{
  "name": "Entitat Exemple",
  "cif": "G08000011",
  "slug": "ENTITAT-EXEMPLE",
  "beneficiary_type": "JSA",
  "org_type": null,
  "municipality": "Barcelona",
  "comarca": "Barcelonès",
  "vegueria": null,
  "total_amount": 1500000,
  "total_grants": 45,
  "first_grant_year": 2019,
  "last_grant_year": 2025,
  "total_contracts": 12,
  "total_contract_amount": 300000,
  "sole_source_pct": 25.0,
  "fragmentation_risk": false,
  "total_public_funds": 1800000,
  "menjometre_score": 52.3,
  "score_volume": 65.0,
  "score_frequency": 70.0,
  "score_concentration": 48.5,
  "score_recurrence": 80.0,
  "score_dominance": 30.0,
  "score_accountability": 20.0,
  "rank": 5000,
  "percentile": 98.5,
  "is_premsa": false,
  "is_tercer_sector": true,
  "is_person": false,
  "website": "https://exemple.cat",
  "org_description": null,
  "equivalencies": [
    { "label": "Mestres d'escola/any", "icon": "👩‍🏫", "count": 42, "annual_cost": 42000 }
  ],
  "url": "https://menjometre.cat/entitat/entitat-exemple"
}

Camps importants per a agents:

| Camp | Tipus | Notes | |---|---|---| | total_public_funds | number | Xifra principal: subvencions + contractes combinats | | menjometre_score | number | 0-100, 0 = per sota del llindar o sense puntuar | | rank | number|null | Posició al ranking per fons públics. null si no rankejat | | percentile | number|null | Percentil (98.5 = top 1.5%) | | sole_source_pct | number|null | % contractes per procediment negociat sense publicitat (0-100) | | equivalencies | array | Llista d'equivalències en serveis públics per total_public_funds | | url | string | Enllaç directe a la fitxa web de l'entitat | | cif | string|null | Pot ser null — ~85% d'entitats no tenen CIF | | score_accountability | number|null | null = no hi ha dades de rendició de comptes |


top — Ranking d'entitats

menjometre top --json                                  # top 10 per puntuació
menjometre top --limit 50 --sort amount --json         # top 50 per import
menjometre top --type premsa --json                    # només mitjans de comunicació
menjometre top --type tercer_sector --json             # només tercer sector
menjometre top --type partit_sindicat --json           # partits i sindicats
menjometre top --type admin_publica --json             # administracions públiques
menjometre top --sort contracts --json                 # per import de contractes
menjometre top --year 2024 --json                      # entitats actives el 2024

| Paràmetre | Valors | Per defecte | |---|---|---| | --limit | 1-100 | 10 | | --sort | score, amount, contracts | score | | --type | all, premsa, tercer_sector, partit_sindicat, admin_publica | all | | --year | Any (1900-2100) | (tots) |


stats — Resum del dataset

menjometre stats --json

Resposta JSON (objecte):

{
  "total_entities": 216659,
  "total_grants": 19496300,
  "total_amount": 25402449638,
  "total_contracts": 1542714,
  "total_contract_amount": 75767672755,
  "scored_entities": 276487,
  "date_range": { "first_year": 2026, "last_year": 2028 },
  "last_sync": null
}

| Camp | Descripció | |---|---| | total_amount | EUR totals en subvencions (no inclou contractes) | | total_contract_amount | EUR totals en contractes públics | | scored_entities | Entitats amb menjometre_score > 0 | | date_range | Rang d'anys del dataset | | last_sync | Timestamp ISO de l'última sincronització, o null |


equivalencies — Calculadora d'equivalències

Converteix un import en EUR a equivalències en serveis públics catalans. Càlcul pur, no consulta la base de dades.

menjometre equivalencies 1000000 --json

Resposta JSON:

{
  "amount": 1000000,
  "equivalencies": [
    { "key": "t_jove", "label": "Abonaments T-jove anuals", "icon": "🚌", "count": 5681, "annual_cost": 176, "tier": "personal", "source": "ATM, 44€/trimestre × 4" },
    { "key": "teachers", "label": "Mestres d'escola/any", "icon": "👩‍🏫", "count": 23, "annual_cost": 42000, "tier": "professional", "source": "Dept. Educació 2024" }
  ]
}

Només retorna equivalències amb count >= 1. Ordenades de menor a major cost anual.


grants — Llistat de subvencions

menjometre grants ENTITAT-EXEMPLE --json
menjometre grants ENTITAT-EXEMPLE --year 2024 --json

Resposta JSON (array):

[
  {
    "year": 2024,
    "amount": 150000,
    "department": "Departament d'Empresa i Treball",
    "purpose": "Foment de l'ocupació",
    "bdns_code": "123456",
    "source": "RAISC"
  }
]

contracts — Llistat de contractes

menjometre contracts ENTITAT-EXEMPLE --json
menjometre contracts G08000011 --year 2023 --json

Resposta JSON (array):

[
  {
    "year": 2023,
    "amount": 85000,
    "amount_with_vat": 102850,
    "organ": "Ajuntament exemple",
    "contract_type": "Serveis",
    "procedure_type": "Obert",
    "num_bidders": 4,
    "description": "Servei de manteniment"
  }
]

xarxa — Xarxa de contactes

Consulta persones vinculades a múltiples entitats a partir de dades oficials (BORME, registres públics).

menjometre xarxa --json                          # top 20 contactes
menjometre xarxa --limit 50 --json               # top 50
menjometre xarxa --search "nom" --json           # filtrar per nom
menjometre xarxa --offset 20 --limit 20 --json   # paginació

| Paràmetre | Descripció | Per defecte | |---|---|---| | --search | Filtrar per nom de persona | (tots) | | --limit | Nombre de resultats (max 100) | 20 | | --offset | Desplaçament per paginació | 0 | | --vincle-filter | Filtre de vincle (veure sota) | (cap) |

Valors acceptats per --vincle-filter:

| Valor | Descripció | |---|---| | concurrent_privat | Persones amb rol actiu al sector privat | | restringit | Rols restringits segons la Llei 13/2005 | | qualsevol | Qualsevol vincle detectat | | conflicte_directe | Conflicte d'interès directe amb l'entitat | | conflicte_potencial | Conflicte d'interès potencial |

Resposta JSON:

{
  "contacts": [
    {
      "person_name": "Nom Cognom",
      "entity_count": 12,
      "total_connections": 12,
      "max_strength": 3,
      "total_amount": 5000000,
      "entity_slugs": ["ENTITAT-A", "ENTITAT-B"],
      "entity_names": ["Entitat A", "Entitat B"]
    }
  ],
  "total_count": 5964
}

persona — Perfil complet d'una persona

Retorna totes les entitats vinculades a una persona (per rols BORME o polítics) i el seu historial de càrrecs al registre mercantil. La resolució es fa per nom exacte: si no el coneixes, cerca'l abans amb xarxa --search o search.

menjometre persona "Nom Cognom" --json
menjometre persona "Nom Cognom"              # taula formatejada
menjometre persona "Nom Cognom" --csv        # només la llista d'entitats

Resposta JSON:

{
  "name": "Nom Cognom",
  "entity_count": 2,
  "total_public_funds": 1500000,
  "total_grants": 500000,
  "total_contracts": 1000000,
  "entities": [
    {
      "entity_slug": "ENTITAT-EXEMPLE",
      "entity_name": "Entitat Exemple",
      "total_amount": 500000,
      "total_grants": 12,
      "total_contract_amount": 1000000,
      "total_contracts": 8,
      "total_public_funds": 1500000,
      "menjometre_score": 55.0,
      "sole_source_pct": 0,
      "roles": ["Administrador únic"],
      "role_source": "BORME"
    }
  ],
  "borme_roles": [
    {
      "company_name": "Empresa Exemple SL",
      "company_nif": "B12345678",
      "relation_type": "Administrador",
      "date_start": "2019-05-10",
      "date_end": null,
      "is_active": true
    }
  ]
}

| Camp | Descripció | |---|---| | entities[].roles | Array de càrrecs d'aquella persona en l'entitat | | entities[].role_source | Font del càrrec (ex: BORME, Parlament) | | borme_roles[].company_nif | Només CIFs corporatius (A-W). NIFs personals es retornen com a null per RGPD |

--csv exporta només la llista entities perquè borme_roles té una forma diferent.


export — Exportació massiva

Exporta dades de fins a 10.000 entitats.

menjometre export --json                # totes les entitats amb subvencions
menjometre export --type premsa --json  # només mitjans de comunicació
menjometre export --format csv          # format CSV

| Paràmetre | Valors | Per defecte | |---|---|---| | --type | all, premsa | all | | --format | json, csv | json |


feedback — Enviar feedback

Envia suggeriments o reporta errors directament a l'equip de Menjometre.

menjometre feedback bug "El resultat de cerca no mostra el municipi correcte per a l'entitat X"
menjometre feedback feature "Seria útil poder filtrar subvencions per departament"

| Paràmetre | Valors | |---|---| | category | bug, feature, improvement, other | | description | Mínim 20 caràcters |


convenis — Convenis de cooperació

Llista els convenis de cooperació d'una entitat amb la Generalitat.

menjometre convenis ENTITAT-EXEMPLE --json
menjometre convenis ENTITAT-EXEMPLE --year 2024 --json

Resposta JSON (array):

[
  {
    "year": 2024,
    "date": "2024-03-15",
    "title": "Conveni de col·laboració per a serveis socials",
    "department": "Departament de Drets Socials",
    "category": "Serveis socials",
    "amount": 150000,
    "amount_generalitat": 100000,
    "document_url": "https://...",
    "is_active": true,
    "expiry_date": "2025-12-31"
  }
]

financials — Estats financers anuals

Mostra els estats financers anuals d'una entitat (ingressos, subvencions, personal, dependència).

menjometre financials ENTITAT-EXEMPLE --json

Resposta JSON (array):

[
  {
    "year": 2024,
    "revenue": 500000,
    "grant_income": 300000,
    "personnel_cost": 200000,
    "grant_dependency_pct": 60.0,
    "personnel_cost_pct": 40.0,
    "source": "SODA"
  }
]

politician — Perfil de càrrec públic

Consulta el perfil d'un càrrec públic amb puntuacions. Les dades provenen del Parlament de Catalunya i registres públics.

menjometre politician "nom cognom" --json

Resposta JSON (objecte):

{
  "name": "Nom Cognom",
  "party": "Partit",
  "position": "Diputat/ada",
  "department": null,
  "salary_eur": 85000,
  "score_total": 45.2,
  "score_opacitat": 60.0,
  "score_conflicte": 30.0,
  "score_efecte_carrec": 20.0,
  "score_acumulacio": 50.0,
  "score_retribucio": 70.0,
  "vincles_count": 3,
  "declarations_count": 2
}

vincles — Vincles entre càrrec públic i entitats

Mostra els vincles entre un càrrec públic i entitats que reben fons públics (dades BORME).

menjometre vincles "nom cognom" --json

Resposta JSON (array):

[
  {
    "company_name": "Empresa SL",
    "company_nif": "B12345678",
    "borme_role": "Administrador",
    "borme_role_type": "private",
    "entity_name": "Entitat vinculada",
    "grants_eur": 500000,
    "contracts_eur": 200000,
    "total_public_funds": 700000,
    "date_start": "2020-01-15",
    "date_end": null
  }
]

declarations — Declaracions patrimonials

Mostra les declaracions patrimonials d'un càrrec públic (dades del Parlament de Catalunya).

menjometre declarations "nom cognom" --json

Resposta JSON (array):

[
  {
    "legislature": 14,
    "declaration_date": "2024-03-15",
    "real_estate_count": 2,
    "real_estate_total": 350000,
    "financial_assets_total": 50000,
    "vehicles_count": 1,
    "debts_total": 120000,
    "total_assets": 400000,
    "total_patrimony_net": 280000
  }
]

Formats de sortida

| Flag | Format | Ús | |---|---|---| | (cap) | Taula formatejada amb colors | Lectura humana al terminal | | --json | JSON estructurat | Agents, scripts, pipelines | | --csv | CSV amb capçaleres | Fulls de càlcul, anàlisi de dades |

# Exportar ranking a CSV
menjometre top --limit 100 --csv > ranking.csv

Configuració

# Per defecte: producció
export MENJOMETRE_API_BASE=https://menjometre.cat

# Desenvolupament local
export MENJOMETRE_API_BASE=http://localhost:3000

No cal autenticació. L'API és pública amb CORS obert.


Gestió d'errors

| Codi HTTP | Significat | Acció recomanada | |---|---|---| | 400 | Paràmetre invàlid | Revisar paràmetres | | 404 | Entitat no trobada | Provar search primer per verificar que existeix | | 429 | Massa peticions | Esperar i reintentar | | 500 | Error intern del servidor | Reintentar després d'uns segons |

Errors retornen: {"error": "missatge descriptiu"}


API REST directa

Si prefereixes HTTP en lloc de la CLI:

| Endpoint | Equivalent CLI | |---|---| | GET /api/search?q=nom | menjometre search "nom" --json | | GET /api/entity/SLUG | menjometre entity SLUG --json | | GET /api/top?limit=10&sort_by=score | menjometre top --json | | GET /api/stats | menjometre stats --json | | GET /api/equivalencies?amount=5000000 | menjometre equivalencies 5000000 --json | | GET /api/export/entity?identifier=SLUG&type=grants&format=json | menjometre grants SLUG --json | | GET /api/export/entity?identifier=SLUG&type=contracts&format=json | menjometre contracts SLUG --json | | GET /api/xarxa/contacts?limit=20 | menjometre xarxa --json | | GET /api/xarxa/contacts?vincle_filter=conflicte_directe | menjometre xarxa --vincle-filter conflicte_directe --json | | GET /api/xarxa/persona/NOM | menjometre persona "NOM" --json | | GET /api/export?format=json | menjometre export --json | | GET /api/export/entity?identifier=SLUG&type=convenis&format=json | menjometre convenis SLUG --json | | GET /api/entity/SLUG/financials | menjometre financials SLUG --json | | GET /api/politician/NOM | menjometre politician "NOM" --json | | GET /api/politician/NOM/vincles | menjometre vincles "NOM" --json | | GET /api/politician/NOM/declarations | menjometre declarations "NOM" --json | | POST /api/feedback | menjometre feedback <category> <description> |

Base URL: https://menjometre.cat


Legal i RGPD

Aquesta eina consulta registres públics oficials:

  • RAISC — Registre d'Ajuts i Subvencions de Catalunya (Generalitat de Catalunya)
  • Dades Obertes de Catalunya — Contractació pública (Generalitat de Catalunya)
  • BORME — Boletín Oficial del Registro Mercantil (Ministeri de Justícia)
  • Declaracions patrimonials del Parlament de Catalunya

Base jurídica: Art. 6.1.e RGPD per a subvencions i contractes (missió d'interès públic, Llei 19/2014 de transparència); Art. 6.1.f RGPD per a dades del BORME (interès legítim, TJUE C-398/15). Cap dada personal és emmagatzemada per la CLI.

Les puntuacions son indicadors estadístics, no judicis ni acusacions. No han d'usar-se per a decisions creditícies, contractuals, laborals o administratives vinculants.

Drets RGPD (accés, rectificació, supressió, oposició): [email protected]


Codi font

  • CLI: https://gitlab.com/menjometre/menjometre-cli (AGPL-3.0)
  • Web + API: https://gitlab.com/menjometre/menjometre (AGPL-3.0)