Skip Trace avatar
Skip Trace

Pricing

$7.00 / 1,000 results

Go to Store
Skip Trace

Skip Trace

Developed by

Sorower Hossan

Sorower Hossan

Maintained by Community

Locate hard-to-find individuals with our powerful skip trace/tracing API. TruePeopleSearch, Fastpeoplesearch, Lead Finder, Truthfinder, Spokeo, BeenVerified, PeopleLooker, PeopleFinders

1.6 (2)

Pricing

$7.00 / 1,000 results

29

Total users

358

Monthly users

174

Runs succeeded

>99%

Issues response

12 hours

Last modified

8 days ago

AS

ASP.NET Web Developer

Closed

asparagus_stepladder opened this issue
a month ago

Not sure what happened I just called it using the API and I think if failed to return results

sorower avatar

Hi there, can you share the code that you used to try the API?

Also I have a direct API on Rapid: https://rapidapi.com/oneapiproject/api/skip-tracing-working-api/

Let me know, how can I help. Thanks.

sorower avatar

Hi, I was able to fix the issue.

Please try now and let me know the results. Thanks!

AS

asparagus_stepladder

a month ago

Thanks. Will try today. I am making a endpoint where users can upload a excel or csv list of contact and then cleaning it up to send to your endpoint.

AS

asparagus_stepladder

a month ago

Here is my code if it helps at all.

[ApiExplorerSettings(IgnoreApi = true)] [HttpPost("run")] [Consumes("multipart/form-data")] public async Task<ActionResult> RunMapped( [FromForm] IFormFile file, [FromForm] FieldMappingRequest mapping) { try { _logger.LogInformation("Starting mapped skip trace run: File: {FileName}", file?.FileName);

if (file == null || file.Length == 0)
{
_logger.LogWarning("Mapped skip trace rejected: No file or empty file provided");
return BadRequest("No file provided or file is empty.");
}
if (!IsValidFileExtension(file.FileName))
{
_logger.LogWarning("Mapped skip trace rejected: Invalid file type: {FileName}", file.FileName);
return BadRequest("Invalid file type. Only CSV and XLSX files are supported.");
}
if (!IsValidMapping(mapping))
{
_logger.LogWarning("Mapped skip trace rejected: Invalid column mapping");
return BadRequest("Invalid column mapping. Required fields must be mapped to columns.");
}
// Build the map: DTO property name → column header name
var columnMap = new Dictionary<string, string>
{
["FirstName"] = mapping.FirstNameColumn,
["LastName"] = mapping.LastNameColumn,
["StreetAddress"] = mapping.StreetColumn,
["City"] = mapping.CityColumn,
["State"] = mapping.StateColumn,
["ZipCode"] = mapping.ZipColumn,
};
// Parse into your AddressDto list
var rows = await _files.ParseAddressesAsync(
file.OpenReadStream(),
file.FileName,
columnMap
);
if (rows == null || !rows.Any())
{
_logger.LogWarning("Mapped skip trace: No valid addresses found in file {FileName}", file.FileName);
return BadRequest("No valid addresses found in the file.");
}
_logger.LogInformation("Parsed {Count} addresses from file {FileName}", rows.Count(), file.FileName);
// Kick off skip‑trace by raw addresses
var activity = await _skip.StartSkipTraceByAddressesAsync(rows, OrgId);
_logger.LogInformation("Skip trace activity created: {ActivityId} with {Count} addresses",
activity.Id, rows.Count());
return CreatedAtAction(nameof(GetById), new { id = activity.Id }, activity);
}
catch (FormatException ex)
{
_logger.LogError(ex, "Format error parsing file {FileName}", file?.FileName);
return BadRequest($"Error parsing file: {ex.Message}");
}
catch (Exception ex)
{
_logger.LogError(ex, "Error running mapped skip trace: {FileName}", file?.FileName);
return StatusCode(500, "An error occurred while processing your request. Please try again.");
}

}

///

/// 3) Starts a skip‑trace run over an existing set of contact IDs. /// [HttpPost] public async Task<ActionResult> Start([FromBody] int[] contactIds) { try { _logger.LogInformation("Starting skip trace for {Count} contacts", contactIds?.Length ?? 0);

if (contactIds == null || contactIds.Length == 0)
{
_logger.LogWarning("Skip trace rejected: No contact IDs provided");
return BadRequest("No contact IDs provided.");
}
// This is a more direct method that does both steps in one call
var activity = await _skip.StartSkipTraceAsync(contactIds, OrgId);
_logger.LogInformation("Skip trace activity created: {ActivityId} for {Count} contacts",
activity.Id, contactIds.Length);
return CreatedAtAction(nameof(GetById), new { id = activity.Id }, activity);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error starting skip trace for {Count} contacts", contactIds?.Length ?? 0);
return StatusCode(500, "An error occurred while processing your request. Please try again.");
}

}

sorower avatar

Can you please recheck now? I just added a fix.

AS

asparagus_stepladder

a month ago

Yes this is working better thank you