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 OR id + card4Digits SMS OTP) + persistent 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 OR SMS OTP) + persistent otpLongTermToken
amex American Express IL אמריקן אקספרס Credit Card Mobile REST API (ring.americanexpress.co.il, id + card6Digits + password OR SMS OTP) + persistent otpLongTermToken
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.7.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.7.0
File Size Uploaded Provenance
israeli_finance_scrapers-0.7.0.tar.gz 91.5 kB With provenance Details

Built distribution (wheel)

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

Total release size: 161.6 kB

Release files / israeli_finance_scrapers-0.7.0.tar.gz

Download URL israeli_finance_scrapers-0.7.0.tar.gz
Size 91.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0e4aeacb0c8fdedc89d7348c43f765efc5827fab3c8f04a4c09e506ab05652ae
BLAKE2b-256 checksum
How to use checksums
4f87576ebab33e9d9acc6ba580eec1224c5f96055a2d54e97135aafa9a8c91eb
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.7.0-py3-none-any.whl

Download URL israeli_finance_scrapers-0.7.0-py3-none-any.whl
Size 70.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8384ae3d8cbb2c2dd0ee2c80bbad2b7c3be42ccc388c9c9988f41c5b2dce9715
BLAKE2b-256 checksum
How to use checksums
b2b876534a1014c69dc20ae71ced4f2742dbd2459cd908742df5fea3e35bf32e
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.7.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.7.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