Skip to main content

israeli-finance-scrapers

PyPI version Python versions License

Unified, modern async Python library to scrape Israeli banks, credit cards, and pension providers.

Browserless First: Wherever possible, scrapers connect directly to mobile and web REST/GraphQL APIs with pure HTTP (httpx), requiring no heavy headless browsers (no Puppeteer, no Chromium, no Playwright).


Supported Providers

Provider Key Institution Hebrew Name Category Auth Flow
onezero One Zero Bank וואן זירו Bank GraphQL API + mTLS, SMS OTP + 10-year otpLongTermToken (idToken)
pepper Pepper Bank פפר Bank Transmit Security v2 + GraphQL (phoneNumber + password), SMS OTP + persistent otpLongTermToken
visa_cal Visa Cal ויזה כאל Credit Card Mobile REST API (username + password), supports passwordless otpLongTermToken (bioLogin)
max Max (Leumi Card) מקס Credit Card Mobile REST API (lcapi, username + password) + persistent device fingerprint (otpLongTermToken)
isracard Isracard ישראכרט Credit Card Mobile REST API (ring.isracard.co.il, id + card6Digits + password)
amex American Express IL אמריקן אקספרס Credit Card Mobile REST API (ring.americanexpress.co.il, id + card6Digits + password)
haphoenix The Phoenix הפניקס Pension & Savings SMS OTP (id + phoneNumber) + 6-month otpLongTermToken
migdal Migdal מגדל Pension & Savings SMS OTP (id + phoneNumber) + AES-CBC otpLongTermToken

(Additional bank and card providers are actively being added! PRs welcome.)


Installation

Using pip:

pip install israeli-finance-scrapers

Using uv:

uv add israeli-finance-scrapers

(Requires Python 3.11+)


Quickstart

1. Scraping Credit Cards (e.g. Visa Cal)

import asyncio
from israeli_finance_scrapers import create_scraper


async def main():
    scraper = create_scraper(
        provider="visa_cal",
        credentials={
            "username": "your_username",
            "password": "your_password",
            # Or use bioLogin token on subsequent runs:
            # "otpLongTermToken": "saved_hash",
        },
    )

    result = await scraper.scrape()

    if not result.success:
        print(f"Failed: {result.error_type} - {result.error_message}")
        return

    for account in result.accounts:
        print(f"💳 Card ending in {account.account_number}")
        print(f"   Balance: ₪{account.balance}")
        print(f"   Credit Limit: ₪{account.credit_limit}")
        print(f"   Transactions: {len(account.txns)}")

        for txn in account.txns[:5]:
            print(f"   - {txn.date}: {txn.description} (₪{txn.charged_amount})")

    # Save the token to skip username/password next time!
    if result.long_term_token:
        print(f"🔑 Saved long-term token: {result.long_term_token}")


asyncio.run(main())

2. Scraping Banks (e.g. One Zero)

import asyncio
from israeli_finance_scrapers import create_scraper


async def prompt_otp() -> str:
    return input("Enter the SMS verification code: ").strip()


async def main():
    scraper = create_scraper(
        provider="onezero",
        credentials={
            "phoneNumber": "0501234567",
            # Or use 10-year idToken on subsequent runs:
            # "otpLongTermToken": "saved_id_token",
        },
    )
    scraper.on_otp_request = prompt_otp

    result = await scraper.scrape()

    for account in result.accounts:
        print(f"🏦 Account: {account.account_number} (Balance: ₪{account.balance})")
        for txn in account.txns[:5]:
            print(f"   - {txn.date}: {txn.description} (₪{txn.charged_amount})")


asyncio.run(main())

3. Scraping Pensions & Education Funds (e.g. Phoenix or Migdal)

import asyncio
from israeli_finance_scrapers import create_scraper


async def prompt_otp() -> str:
    return input("Enter SMS OTP code: ").strip()


async def main():
    scraper = create_scraper(
        provider="haphoenix",  # or "migdal"
        credentials={
            "id": "123456789",
            "phoneNumber": "0501234567",
        },
    )
    scraper.on_otp_request = prompt_otp

    result = await scraper.scrape()

    print(f"💰 Total Balance: ₪{result.portfolio_summary.total_balance:,.2f}")
    for fund in result.funds:
        print(f"📂 {fund.name} ({fund.product_type}): ₪{fund.balance:,.2f}")


asyncio.run(main())

Unified JSON Schema

Every scraper returns a ScrapingResult (.to_dict() / .to_json()):

{
  "success": true,
  "provider": "visa_cal",
  "accounts": [
    {
      "account_number": "1234",
      "account_type": "credit_card",
      "balance": -1250.0,
      "credit_limit": 15000.0,
      "open_to_buy": 12000.0,
      "currency": "ILS",
      "txns": [
        {
          "identifier": "999",
          "date": "2026-10-24",
          "processed_date": null,
          "original_amount": 45.0,
          "original_currency": "ILS",
          "charged_amount": 45.0,
          "description": "Cafe Aroma",
          "status": "pending",
          "type": "normal"
        }
      ]
    }
  ],
  "funds": [],
  "portfolio_summary": null,
  "long_term_token": "hash_or_token"
}

License

This project is licensed under the Apache-2.0 License.

Metadata

Release files for israeli-finance-scrapers 0.2.0

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

Source distribution (sdist)

Source distribution for israeli-finance-scrapers 0.2.0
File Size Uploaded Provenance
israeli_finance_scrapers-0.2.0.tar.gz 86.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for israeli-finance-scrapers 0.2.0
File Interpreter ABI Platform
israeli_finance_scrapers-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 153.7 kB

Release files / israeli_finance_scrapers-0.2.0.tar.gz

Download URL israeli_finance_scrapers-0.2.0.tar.gz
Size 86.9 kB
Tags Source
SHA-256 checksum
How to use checksums
15a66f08771a8c8446aefbb1dcc26a0a27013fe72a10fadb530e1714d84cceed
BLAKE2b-256 checksum
How to use checksums
ee9c15c492cb81ae77277c99e0dcfe1cae3604f722e183648d63b4353634ce5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 25, 2026.

Transparency log

Release files / israeli_finance_scrapers-0.2.0-py3-none-any.whl

Download URL israeli_finance_scrapers-0.2.0-py3-none-any.whl
Size 66.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
470101fd95f1fa6d92ddf7a357361b566b66f38f59c280fe1f0a32dfb35253d7
BLAKE2b-256 checksum
How to use checksums
1de0755c0b72a1599766e2633e66e72eb1609911568d0a18f984a0039afcbb91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 25, 2026.

Transparency log

Security for israeli-finance-scrapers 0.2.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for israeli_finance_scrapers-0.2.0.tar.gz

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 Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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