Models¶
django-acquisitions provides models for managing customer acquisition pipelines.
ProspectiveClient¶
The core model representing a potential customer in your acquisition pipeline.
Status Workflow:
new- Just entered the pipelinecontacted- Initial outreach madequalified- Confirmed as a good fitproposal- Proposal sentnegotiation- In active negotiationwon- Successfully converted to customerlost- Did not convertdormant- Inactive, may revisit later
Source Tracking:
Track where prospective clients come from: referral, website, cold call, trade show, social media, advertisement, or other.
Key Features:
UUID for external/API references
Industry classification (FK)
Multiple category tags (M2M)
Scoring and priority for pipeline management
Estimated contract value
Assignment to sellers
Conversion tracking with timestamps
Note
Lead is available as a backwards-compatible alias for ProspectiveClient.
Example:
from acquisitions.models import ProspectiveClient
pc = ProspectiveClient.objects.create(
company_name="Acme Corp",
status=ProspectiveClient.Status.NEW,
source=ProspectiveClient.Source.WEBSITE,
priority=1,
score=85,
)
# Check if active in pipeline
if pc.is_active:
print("Still working this prospect")
# Convert to customer
pc.mark_converted(customer_id=123)
ProspectiveClientContact¶
Contact person associated with a prospective client. Supports multiple contacts per company.
Roles:
decision_maker- Has authority to make purchasing decisionsinfluencer- Influences the decisionchampion- Internal advocate for your solutionend_user- Will use the product/servicegatekeeper- Controls access to decision makersother- Other role
Key Features:
Primary contact designation (auto-manages uniqueness)
Contact preferences (email, phone, SMS)
Opt-out tracking for compliance
Best time to contact
Note
LeadContact is available as a backwards-compatible alias for ProspectiveClientContact.
Example:
from acquisitions.models import ProspectiveClientContact
contact = ProspectiveClientContact.objects.create(
prospective_client=pc,
first_name="Jane",
last_name="Doe",
title="VP of Operations",
role=ProspectiveClientContact.Role.DECISION_MAKER,
email="jane@acme.com",
is_primary=True,
)
Touchpoint¶
Record of every interaction with a prospective client.
Types:
email- Email communicationphone- Phone callsms- Text messagemeeting- In-person meetingvideo- Video callsocial- Social media interactionmail- Physical mailother- Other interaction
Directions:
outbound- You contacted theminbound- They contacted you
Outcomes:
success- Successful interactionno_answer- No answervoicemail- Left voicemailbounced- Email bounceddeclined- Not interestedfollow_up- Requires follow-uppending- Awaiting response
Example:
from acquisitions.models import Touchpoint
from django.utils import timezone
touchpoint = Touchpoint.objects.create(
prospective_client=pc,
touchpoint_type=Touchpoint.TouchpointType.EMAIL,
direction=Touchpoint.Direction.OUTBOUND,
outcome=Touchpoint.Outcome.PENDING,
subject="Introduction to our services",
occurred_at=timezone.now(),
performed_by_id=request.user.id,
)
OutreachCampaign¶
Automated multi-step outreach sequences.
Statuses:
draft- Being created, not activeactive- Running and enrolling prospectspaused- Temporarily stoppedcompleted- Finishedarchived- No longer in use
Example:
from acquisitions.models import OutreachCampaign, CampaignStep
campaign = OutreachCampaign.objects.create(
name="New Lead Welcome Series",
status=OutreachCampaign.Status.ACTIVE,
max_contacts_per_day=50,
)
CampaignStep.objects.create(
campaign=campaign,
step_order=0,
step_type=CampaignStep.StepType.EMAIL,
delay_days=0,
subject_template="Welcome {{ company_name }}!",
body_template="Hi {{ first_name }}, ...",
)
CampaignStep.objects.create(
campaign=campaign,
step_order=1,
step_type=CampaignStep.StepType.EMAIL,
delay_days=3,
subject_template="Following up",
body_template="Just checking in...",
skip_if_responded=True,
)
CampaignEnrollment¶
Tracks which prospective clients are enrolled in which campaigns.
Example:
from acquisitions.models import CampaignEnrollment
enrollment = CampaignEnrollment.objects.create(
prospective_client=pc,
campaign=campaign,
)
Category¶
Tags for categorizing prospective clients (many-to-many relationship).
Example:
from acquisitions.models import Category
enterprise = Category.objects.create(
name="Enterprise",
color="#3b82f6",
description="Large enterprise accounts",
)
pc.categories.add(enterprise)
Industry¶
Industry classification for prospective clients.
Example:
from acquisitions.models import Industry
tech = Industry.objects.create(
name="Technology",
description="Software and hardware companies",
)
pc.industry = tech
pc.save()
MarketingDocument¶
Sales and marketing collateral for the acquisition process.
Document Types:
brochure- Company/product brochurecase_study- Customer case studypricing- Pricing sheetproposal- Proposal templatepresentation- Sales presentationone_pager- One-page summaryfaq- Frequently asked questionsother- Other document
Features:
File upload or external URL
Version tracking
Internal-only flag for confidential documents
View and download count tracking
Example:
from acquisitions.models import MarketingDocument
doc = MarketingDocument.objects.create(
name="Product Brochure 2024",
document_type=MarketingDocument.DocumentType.BROCHURE,
version="2.0",
external_url="https://example.com/brochure.pdf",
)
# Track usage
doc.increment_view_count()
doc.increment_download_count()
SellerProfile¶
Internal seller profile for automation and preferences.
Features:
Email signature for outreach
Working hours and days for scheduling
Timezone support
Auto-assignment settings
Performance stats (conversions, active prospects)
Example:
from acquisitions.models import SellerProfile
profile = SellerProfile.objects.create(
user_id=user.id,
display_name="Jane Smith",
email="jane@company.com",
working_hours_start="09:00",
working_hours_end="17:00",
working_days="1,2,3,4,5", # Mon-Fri
timezone="America/New_York",
)