# Loan Safe Bot (`denim_downdraft/loan-safe-bot`) Actor

Verify Nigerian loan apps with confidence. Search official FCCPC records for a lender's published status and company, discover other apps listed under that company, check up to 100 names, and track changes over time.

- **URL**: https://apify.com/denim_downdraft/loan-safe-bot.md
- **Developed by:** [Data Divas](https://apify.com/denim_downdraft) (community)
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 loan app checks

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Loan Safe do?

Choosing a loan app can feel risky. The Federal Competition and Consumer Protection Commission (FCCPC) has [warned about harassment and abusive debt collection](https://fccpc.gov.ng/digital-lending-fccpc-tackles-abuses-issues-landmark-regulations/) by some digital lenders. Loan Safe helps you check what the commission has published about an app before you borrow.

Enter an app or company name, and Loan Safe will check whether it appears in the FCCPC's digital money lender records, show whether it is approved or in another published category, identify the company named in the listing, and link you to the [official source](https://fccpc.gov.ng/registration-of-digital-money-lenders/approvals-of-dmls/). You can check up to 100 names at once, explore other apps listed under a company, and track changes over time.

An FCCPC listing is a useful first check, not a guarantee that a loan is safe or affordable. Before borrowing, check the loan's interest rate, fees, and repayment terms carefully.

### Why use Loan Safe?

Before you borrow, find out who is behind the loan app. Loan Safe shows the company and FCCPC category linked to it, with the original record beside the answer so you can check it yourself.

### How to use Loan Safe

1. Open the **Input** tab. Leave **Ask about a lender** selected.
2. Enter an app or company name, such as `CLAN`.
3. Click **Start**.
4. Open **Output** to read the answer. You'll see the company, the FCCPC category, when the source was checked, and the source link.

Want to do something else? Choose the matching option in **Input**:

| I want to... | Choose... |
| --- | --- |
| Find apps listed with a company | **Explore a company and its apps** |
| Check a list of names | **Check several lenders** |
| See what changed since an earlier run | **Track registry changes** |
| Download every listing | **Export the full FCCPC registry** |

The first change check saves a starting point. Run it again using the same history store name to see which listings are new, changed, or no longer found. A scheduled run can repeat this check for you.

### Input

The form is enough for most users. Only fill in the fields for the option you chose. The main fields are:

| Field | What to enter |
| --- | --- |
| **What would you like to do?** | Pick one of the five options above. |
| **App or company name / question** | One name or question for a lookup or company search. |
| **Lender names for batch checking** | Up to 100 names, one per item. |
| **Understand questions with Gemini** | Optional. Exact name checks work without an AI key. |
| **History store name** | For change tracking, keep the same name across runs. |

For example, this checks one name without AI:

```json
{"mode":"lookup","message":"CLAN","useAI":false}
```

If you want to ask questions in everyday language, add `GEMINI_API_KEY` as a secret environment variable. Loan Safe still takes lender facts from the FCCPC records, not from the AI model. If Gemini is unavailable, it falls back to basic lookup.

### Output

The **Output** tab shows a readable answer and the details behind it. The example below uses fictional names; it is not a real approval claim:

```json
{
  "kind": "match",
  "reply": "Company: Example Company. Published category: Approved. See the source and check time.",
  "companyName": "Example Company",
  "appNames": ["Example App"],
  "status": "approved",
  "sourceUrl": "https://fccpc.gov.ng/registration-of-digital-money-lenders/approvals-of-dmls/",
  "checkedAt": "2026-09-24T10:00:00+00:00"
}
```

If a name could refer to more than one listing, Loan Safe asks you to choose. If it cannot find a name, it says **not found**. Neither result proves that an app is illegal or unsafe. If the FCCPC page cannot be read, the run fails instead of giving a misleading answer.

You can download the dataset as JSON, HTML, CSV, or Excel. The run's key-value store also contains the complete `OUTPUT` record.

### Data table

| Field | Meaning |
| --- | --- |
| `companyName` | Company name shown in the registry, when available. |
| `appNames` | App names listed with that record. |
| `registryStatus` | The FCCPC category as published. |
| `status` | A simplified category used by Loan Safe. |
| `sourceUrl` | Link to the FCCPC page. |
| `checkedAt` | When Loan Safe checked the page, not when FCCPC made a decision. |
| `kind` | Whether the search found a match, needs clarification, or found nothing. |

### Pricing / Cost estimation

#### How much does it cost to check the FCCPC registry?

Loan Safe charges **$0.01 for each app or lender name checked** in a lookup or batch run. A 10-name batch costs $0.10 for checks. Apify also charges a small Actor Start fee ($0.00005 at 1 GB memory) when a run begins. Other modes currently have no per-check charge. If you enable Gemini, its provider may charge separately. Set a maximum cost per run in Apify to control spending.

### Tips and advanced options

- For the most reliable lookup, use the exact app or company name shown in the registry.
- In **Track registry changes**, keep the same history store name. The first run creates the baseline; later runs compare against it. Run one change check at a time for each store.
- **No longer found** means a listing was missing from the latest check. It does **not** mean FCCPC delisted the lender. Open the source link before drawing a conclusion.
- A fresh lookup checks the published page. Change tracking uses Apify's key-value storage to keep earlier observations, and Apify schedules can run the comparison regularly.

### FAQ, limitations, and support

**Does “approved” mean a loan is safe or affordable?** No. It describes the published registry category, not the price, terms, collection practices, or suitability of a loan. Conditional approval and registration waiver are separate categories.

**What if my app isn't found?** Try its company name or another spelling, then check the [FCCPC page](https://fccpc.gov.ng/registration-of-digital-money-lenders/approvals-of-dmls/) directly. Absence from a search result is not proof that an app is illegal.

**Can Loan Safe compare interest rates?** No. The FCCPC registry used here does not provide a reliable, current rate comparison. Loan Safe is for checking published lender listings and changes.

**Where does change history begin?** With your first successful change check. The time shown is when Loan Safe observed the page, not an FCCPC decision date.

Loan Safe is an independent tool, not an FCCPC service. Please respect the source site's terms when using public data. If something looks wrong, use the Actor's **Issues** tab and include a run ID and a non-sensitive example. Do not post API keys or private financial details.

### Technologies and tools used

- **Python and Apify SDK:** Run Loan Safe and process each request.
- **FCCPC digital money lender records:** Provide published app names, lender companies, and categories.
- **Apify datasets:** Store answers and results for viewing or download.
- **Apify key-value storage:** Keep earlier registry snapshots for change tracking.
- **Apify schedules:** Run repeat checks automatically.
- **Google Gemini (optional):** Helps understand questions written in everyday language. FCCPC records still determine the lender facts.
- **Apify pay-per-event:** Charge for completed lender name checks.

### How Loan Safe works

![Loan Safe architecture diagram showing the input, FCCPC records, lender lookup, change tracking, and Apify output](https://api.apify.com/v2/key-value-stores/sPKQH3YyQf9CXHMQa/records/loan-safe-architecture.svg?signature=rIeOXWsNOcTaNGQkshDh\&v=3)

Gemini can help interpret questions written in everyday language before matching. FCCPC records provide the lender facts.

# Actor input Schema

## `mode` (type: `string`):

Start with Ask about a lender and enter CLAN below. Choose another mode to explore a company, check a list, track changes or export the registry.

## `message` (type: `string`):

For lender questions or company exploration. Try CLAN, KASHOUT, or Which apps are listed under the company behind KASHOUT? The other modes ignore this field.

## `useAI` (type: `boolean`):

Used only for Ask about a lender. Requires your GEMINI_API_KEY environment variable. Exact name lookup and the other modes work without AI. Registry records determine the facts.

## `names` (type: `array`):

Batch mode only. Add one app or company name per item, up to 100. Results keep your order, including duplicates. No AI key needed.

## `monitorStoreName` (type: `string`):

Changes mode only. Reuse this name between checks. Run only one check at a time per store.

## `maxMissingPercent` (type: `number`):

Changes mode only. Preserve the baseline if more than this percentage of company/app identities disappears. Increase only after reviewing the source.

## `context` (type: `object`):

Paste only the returned context object, not an entire Actor input or answer.

## Actor input object example

```json
{
  "mode": "lookup",
  "message": "CLAN",
  "useAI": true,
  "names": [
    "CLAN",
    "KASHOUT"
  ],
  "monitorStoreName": "loan-safe-registry-history",
  "maxMissingPercent": 20,
  "context": {}
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `fullResult` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "message": "CLAN",
    "names": [
        "CLAN",
        "KASHOUT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("denim_downdraft/loan-safe-bot").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "message": "CLAN",
    "names": [
        "CLAN",
        "KASHOUT",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("denim_downdraft/loan-safe-bot").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "message": "CLAN",
  "names": [
    "CLAN",
    "KASHOUT"
  ]
}' |
apify call denim_downdraft/loan-safe-bot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,denim_downdraft/loan-safe-bot"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UDkKnTubaCF5mrpgk/builds/yUJaFFATQEbg5mCS5/openapi.json
